shr*_*ads 8 iphone cocoa-touch objective-c uikit
我想禁用UIAction表中的按钮,并在某个条件成立后启用它们.我该如何实现这一目标?有任何想法吗?
我发现克雷格的答案对我不起作用(在OS 3.1上).经过一番挖掘后,我发现子视图UIActionSheet实际上是一个没有文档的类 UIThreePartButton
无论如何,这适合我(作为UIActionSheetDelegete方法的一部分实现)
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet // before animation and showing view
{
for (UIView* view in [actionSheet subviews])
{
if ([[[view class] description] isEqualToString:@"UIThreePartButton"])
{
if ([view respondsToSelector:@selector(title)])
{
NSString* title = [view performSelector:@selector(title)];
if ([title isEqualToString:@"Button 1"] && [view respondsToSelector:@selector(setEnabled:)])
{
[view performSelector:@selector(setEnabled:) withObject:NO];
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助别人,虽然我会回应Ed Marty关于你是否会更好地从行动表中省略这些按钮而不是这样做的问题.与使用未记录的功能一样,存在应用程序存储拒绝的风险,尽管如果Apple在未来的操作系统版本中再次使用API,这些代码将被正常写入.
当操作表打开时,是否存在可能发生变化的情况,从而导致按钮启用?如果没有,我认为更好的方法是根据您的情况更改工作表显示的按钮。
否则,处理此问题的唯一方法是迭代工作表的子视图,就像克雷格所说,并查找对象UIButton。不过,我会谨慎使用按钮的标题,因为标题可以(并且应该!)针对不同的语言进行本地化。因此,与标题的比较并不那么可靠。由于您没有创建按钮,因此您也不知道每个按钮的tag或action每个按钮是什么,所以这也有点困难。
据推测,这些按钮将subviews按照您在 中指定的顺序出现在数组中UIActionSheet,但由于这没有记录在案,因此无法保证它们会按该顺序出现,或者在将来的版本中将继续按该顺序出现Cocoa Touch SDK 的。正因为如此,我主要担心的是因为使用未记录的功能而被 App Store 拒绝。
| 归档时间: |
|
| 查看次数: |
16362 次 |
| 最近记录: |