访问单个字符串参数(UIAlertView otherButtonTitles)

时间:2013-01-07 16:28:18

标签: ios nsstring uialertview

我正在为应用程序编写自己的自定义警报视图。客户对警报类型消息有自己的外观/感觉。我已经读过,子类化UIAlertView并不是一个好主意,所以我只是想让当前的消息视图我使用的更动态,所以我可以重复使用它。

好的,我的问题。我正在从UIAlertView窃取init以初始化我自己的自定义警报。

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;

这是Apple的UIAlertView初始化程序。我的工作方式是一样的,所以为什么不使用他们的init。

我希望能够为otherButtonTitles传递多个字符串,就像UIAlertView一样。我的问题是,如何访问传入的字符串?

1 个答案:

答案 0 :(得分:1)

我可能otherButtonTitles参数是NSArray而不是NSString。从那里,您可以根据数组的计数动态生成其他按钮,并将所述按钮的标题设置为存储在数组当前索引中的NSString。

编辑:我认为我在UIAlertView.m中找到了一些有希望的东西(不确定它是否真的来自Apple),但它也需要其他按钮标题作为字符串。它使用va_list来存储otherButtonTitles,然后将对象添加到包含所有按钮的可变数组中,包括索引0处的取消按钮(如果适用)。

https://github.com/BigZaphod/Chameleon/blob/master/UIKit/Classes/UIAlertView.m

以下是摘录:

 if (otherButtonTitles) {
        [self addButtonWithTitle:otherButtonTitles];

        id buttonTitle = nil;
        va_list argumentList;
        va_start(argumentList, otherButtonTitles);

        while ((buttonTitle=(__bridge NSString *)va_arg(argumentList, void *))) {
            [self addButtonWithTitle:buttonTitle];
        }

        va_end(argumentList);
    }