gpt4 book ai didi

iphone - 使用 NSArray 指定 otherButtonTitles?

转载 作者:行者123 更新时间:2023-12-03 18:10:41 28 4
gpt4 key购买 nike

UIAlertSheet 的构造函数采用 otherButtonTitles 参数作为 varg 列表。我想从 NSArray 指定其他按钮标题。这可能吗?

即我必须这样做:

id alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: button1Title, button2Title, nil];

但是由于我在运行时生成可用按钮的列表,所以我真的想要这样的东西:

id alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: otherButtonTitles];

现在,我认为我需要为 1 个项目、2 个项目和 3 个项目单独调用 initWithTitle:。像这样:

if ( [titles count] == 1 ) {
alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: [titles objectAtIndex: 0], nil];
} else if ( [titles count] == 2) {
alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: cancelString
destructiveButtonTitle: nil
otherButtonTitles: [titles objectAtIndex: 0], [titles objectAtIndex: 1], nil];
} else {
// and so on
}

这是很多重复的代码,但实际上可能是合理的,因为我最多有三个按钮。我怎样才能避免这种情况?

最佳答案

这已经有一年的历史了,但解决方案非常简单......按照@Simon的建议进行操作,但不指定取消按钮标题,所以:

UIActionSheet *alert = [[UIActionSheet alloc] initWithTitle: titleString
delegate: self
cancelButtonTitle: nil
destructiveButtonTitle: nil
otherButtonTitles: nil];

但是在添加普通按钮后,添加取消按钮,例如:

for( NSString *title in titles)  {
[alert addButtonWithTitle:title];
}

[alert addButtonWithTitle:cancelString];

现在关键的一步是指定哪个按钮是取消按钮,例如:

alert.cancelButtonIndex = [titles count];

我们执行[titles count],而不是[titles count] - 1,因为我们将取消按钮添加为titles 中按钮列表的额外内容.

现在,您还可以通过指定 structuralButtonIndex(通常是 [titles count] - 1 按钮)来指定要作为破坏性按钮的按钮(即红色按钮)。另外,如果您将取消按钮保留为最后一个按钮,iOS 将在其他按钮和取消按钮之间添加良好的间距。

所有这些都兼容 iOS 2.0,所以尽情享受吧。

关于iphone - 使用 NSArray 指定 otherButtonTitles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com