UIActionSheetdelegate 没有获得子视图
Posted
技术标签:
【中文标题】UIActionSheetdelegate 没有获得子视图【英文标题】:UIActionSheetdelegate not getting subviews 【发布时间】:2014-12-31 04:38:13 【问题描述】:在我的 ios 8 应用程序中,我使用的是 UIActionSheet。我尝试在willPresentActionSheet
委托方法中更改按钮标题的颜色,但它没有将按钮识别为其子视图。
我这样构造UIActionSheet
:
UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:@"Select an Option" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];
popup.tag = 2;
[popup addButtonWithTitle:@"Add Tag To Chat"];
[popup addButtonWithTitle:@"Remove Tag From Chat"];
[popup addButtonWithTitle:@"Terminate"];
[popup addButtonWithTitle:@"Cancel"];
[popup showInView:self.view];
代表是:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
NSLog(@"%d",[actionSheet.subviews count]);
for (UIView *subview in actionSheet.subviews)
if ([subview isKindOfClass:[UIButton class]])
UIButton *button = (UIButton *)subview;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
按钮正在显示,我可以单击并执行操作。但它说 count = 0。为什么?
【问题讨论】:
Action sheet 不像在 iOS 7 中那样可定制。尝试任何一种开源替代品,因为您只是在尝试破解您的方式,这可能只会使其在其他操作系统版本中崩溃。跨度> 在 iOS 8 下,UIActionSheet
是用新的UIAlertController
实现的,它完全不同,不能以任何方式自定义。您需要创建或使用支持您想要的自定义实现。
This is one of the nicest (and customizable) open source action sheets
这将对您有所帮助。它对我有用:) ***.com/questions/24154889/…
【参考方案1】:
试试这个方法,改变子视图的UIColor
:
UIActionSheet * action = [[UIActionSheet alloc]
initWithTitle:@"Title"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"",nil];
[[[action valueForKey:@"_buttons"] objectAtIndex:0] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
我试过了。它正在工作......
【讨论】:
【参考方案2】:您尝试检查子视图数量的委托方法:willPresentActionSheet 似乎不合适。
willPresentActionSheet 在实际呈现操作表之前调用。
如果你在didlPresentActionSheet中查看子视图的数量,那会更合适。
希望这会有所帮助..
【讨论】:
在 iOS 8 中,UIACtionSheet 的行为类似于 UIActivityViewController 您没有阅读问题吗?我在第一行提到了“在我的 iOS 8 应用程序中”。我只是想知道是否有其他方法可以做到。以上是关于UIActionSheetdelegate 没有获得子视图的主要内容,如果未能解决你的问题,请参考以下文章
EditText自动获得了焦点但没有弹出输入法软键盘?????