2

我只遇到了 iOS 6 的问题。
这段代码适用于所有其他版本。
我没有收到任何警告。

代码只是不符合if条件。即使 NSLog 将 buttonTitle 的值正确显示为“选择目标”,
它也无法present.title与字符串进行比较。Select Goal

- (void)actionSheet:(UIActionSheet *)presentSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSString *buttonTitle=[presentSheet buttonTitleAtIndex:buttonIndex];
    NSLog(@"button title  is %@", buttonTitle);

    actionSheet.delegate =self;
    if (presentSheet.title == @"Select Goal") {
        self.goalsTextField.text =buttonTitle;
        [self.goalsTextField resignFirstResponder];

    }

    if (presentSheet.title ==@"Select Level") {
        self.levelTextField.text =buttonTitle;
        [self.levelTextField resignFirstResponder];

    }

 }
4

3 回答 3

1

不要使用 进行字符串比较,请==使用isEqualToString:

于 2012-09-22T21:37:45.340 回答
0

我不确定为什么比较失败,但我可以让你感兴趣UIActionSheet+Blocks吗?我一直考虑UIAlertViewUIActionSheet拥有一个非常糟糕的回调 API,因为它对代码更改非常脆弱,并且对于按钮的运行时参数检查有点混乱。

UIAlertView+Blocks并将UIActionSheet+Blocks为您提供一个基于块的 API,您可以在其中更轻松地动态确定向用户呈现哪些选项,但更重要的是,在用户做出选择时执行块应该发生的事情。对于开发人员而言,此 API 的脆弱性和易错性无限降低。它还使得当您在视图控制器中有多个警报和操作表时,您不必进行任何条件编码。在周围,这是纯粹的胜利。我非常困惑为什么 Apple 没有在 UIKit 中创建基于块的 API。

于 2012-09-22T21:27:31.507 回答
0

您不能使用比较字符串值==,您正在尝试比较 NSString对象并通过编写一个语句,就像presentSheet.title == @"Select Goal"您正在比较对象指针 (即内存位置,这并不总是相同。实际上可能几乎从来没有。),而不是您认为要比较的字符串值。

要比较字符串值,有 NSString 方法,您需要的是:

if([presentSheet.title isEqualToString:@"Select Goal"])

那应该这样做。

于 2012-09-23T08:03:32.373 回答