Как сгенерировать многострочную, а не единственную строку с UIAlertView?

Это мой код

 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Added to Cart" message:@"Some items are added for time being!" delegate:self cancelButtonTitle:@"View Cart" otherButtonTitles:@"Continue \n Shopping", nil];
alert.tag = 20;
[alert show];

Я получаю вывод, как это:

Мне нужно вот так:

4 ответа

Решение

У меня есть ручное решение для вас. Но я думаю, что это не очень хорошее решение:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Added to Cart" message:@"Some items are added for time being!" delegate:self cancelButtonTitle:@"View Cart" otherButtonTitles:@"", nil];

    UILabel *buttonTitle = [[UILabel alloc] initWithFrame:CGRectMake(148, 102, 125, 40)];
    buttonTitle.text = @"Continue Shopping";
    buttonTitle.font = [UIFont boldSystemFontOfSize:15];
    buttonTitle.textColor = [UIColor whiteColor];
    buttonTitle.textAlignment = UITextAlignmentCenter;
    buttonTitle.backgroundColor = [UIColor clearColor];
    buttonTitle.numberOfLines = 2;
    [alert addSubview:buttonTitle];
    alert.tag = 20;
    [buttonTitle release];
    [alert show];

Вы можете использовать его в любом случае....

UIAlertView не поддерживает многострочные кнопки. Одним из вариантов будет просто использовать "Продолжить" вместо "Продолжить покупки" в качестве заголовка кнопки, в противном случае вам придется использовать настраиваемый компонент просмотра предупреждений, например, CODialog (вам может потребоваться настроить его немного, чтобы разрешить многострочный кнопки, но это должно быть легко).

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Added to Cart" message:@"Some items are added for time being!" delegate:self cancelButtonTitle:@"View Cart" otherButtonTitles:@"Continue \n Shopping", nil];
alert.tag = 20;
[[[alert buttons] objectAtIndex:1] setLineBreakMode:UILineBreakModeWordWrap];
[alert show];

Этот код делает именно то, что вам нужно. Обратите внимание, однако, что

  1. - [UIAlertView buttons] без документов
  2. - [UIButton setLineBreakMode] устарела. Однако вы можете заменить его на

    [button.titleLabel setLineBreakMode] что по сути то же самое.

Я думаю, вы можете попытаться установить свойство numbersOfLine для надписи на кнопке. Но я не знаю, что Apple это одобрит.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Added to Cart" message:@"Some items are added for time being!" delegate:self cancelButtonTitle:@"View Cart" otherButtonTitles:@"Continue \n Shopping", nil];
NSArray *subviewsArray = [alert subviews];
    for (UIView *subview in subviewsArray) {
        if ([subview isKindOfClass:[UIButton class]]) {
            NSArray *btnSubviews = [subview subviews];
            for (UIView *btnSubview in btnSubviews) {
                if ([btnSubview isKindOfClass:[UILabel class]]) {
                    UILabel *title = (UILabel *)btnSubview;
                    title.numberOfLines = 2;
                }
            }
        }
    }
alert.tag = 20;
[alert show];
[alert release];
Другие вопросы по тегам