2

我目前正在开发一个需要支持 iOS6 和 iOS7 的应用程序。

我正在创建这样的警报:

self.newCategoryAlertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"MessageTitleNewCategory", nil)
                                                    message:NSLocalizedString(@"MessageTextNewCategory", nil)
                                                   delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles:NSLocalizedString(@"ButtonOK", nil), NSLocalizedString(@"ButtonCancel", nil), nil] autorelease];

self.newCategoryAlertView.cancelButtonIndex = 1;
self.newCategoryAlertView.tag = alertViewTypeNewCategory;
self.newCategoryAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
[self.newCategoryAlertView textFieldAtIndex:0].delegate = self;
[self.newCategoryAlertView textFieldAtIndex:0].autocapitalizationType = UITextAutocapitalizationTypeSentences;
[[self.newCategoryAlertView textFieldAtIndex:0] setReturnKeyType:UIReturnKeyDone];
[[self.newCategoryAlertView textFieldAtIndex:0] setKeyboardAppearance:UIKeyboardAppearanceDefault];
[self.newCategoryAlertView textFieldAtIndex:0].enablesReturnKeyAutomatically = YES;

[self.newCategoryAlertView show];

在委托中,我正在实现以下协议方法

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    if(alertView.tag == alertViewTypeNewCategory)
    {
        UITextField *textField = [alertView textFieldAtIndex:0];
        if (!textField.text || [textField.text isEqualToString:@""])
        {
            return NO;
        } else {
            return YES;
        }
    } else {
        return YES;
    }
}

我的问题是左侧按钮在 iOS6 上被禁用(如预期的那样),但在 iOS7 上运行时,右侧按钮被禁用。

我检查了委托方法中的cancelButtonIndex和firstOtherButtonIndex的值,它们在iOS7和iOS6中是相同的。

任何提示我做错了什么?或解决此行为的解决方法?

4

1 回答 1

1

似乎 iOS 7 已经根据索引更改了按钮的排列顺序。我已经尝试了您的代码并添加了更多按钮来检查排列顺序。

[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"MessageTitleNewCategory", nil)
                                                        message:NSLocalizedString(@"MessageTextNewCategory", nil)
                                                       delegate:self
                                              cancelButtonTitle:nil
                                              otherButtonTitles:NSLocalizedString(@"ButtonOK", nil), NSLocalizedString(@"ButtonCancel", nil),NSLocalizedString(@"Third Button", nil),NSLocalizedString(@"Fourth Button", nil),NSLocalizedString(@"Fifth Button", nil), nil];

对于 iOS 7 中的 UIAlertView

在此处输入图像描述

第一个按钮“ButtonOK”在顶部,但第二个按钮在最后一个位置,其余按钮按升序排列,与以前的 iOS 版本相同。

因此,您可以使用 [[UIDevice currentDevice] systemVersion] 检查 iOS 版本并执行

   if (iOS 7) {
     self.newCategoryAlertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"MessageTitleNewCategory", nil)
                                                message:NSLocalizedString(@"MessageTextNewCategory", nil)
                                               delegate:self
                                      cancelButtonTitle:nil
                                      otherButtonTitles:NSLocalizedString(@"ButtonCancel", nil),NSLocalizedString(@"ButtonOK", nil), , nil] autorelease];
  }else{
      self.newCategoryAlertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"MessageTitleNewCategory", nil)
                                                message:NSLocalizedString(@"MessageTextNewCategory", nil)
                                               delegate:self
                                      cancelButtonTitle:nil
                                      otherButtonTitles:NSLocalizedString(@"ButtonOK", nil), NSLocalizedString(@"ButtonCancel", nil), nil] autorelease];
  }
于 2013-10-21T10:26:37.473 回答