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 没有获得子视图的主要内容,如果未能解决你的问题,请参考以下文章

在 xib 中定义的方法没有工作关闭

EditText自动获得了焦点但没有弹出输入法软键盘?????

Google Play 控制台显示我的应用获得了后台位置权限,但我的应用没有

UIActionSheet

我在 Android Q 中获得了 IMEI 空值?

TableView 不会在 UINavigationController 内加载