UIActionSheet *myActionSheet = [[UIActionSheet alloc]
initWithTitle:nil
delegate:self
cancelButtonTitle:@"取消"
destructiveButtonTitle:nil
otherButtonTitles: @"分享",@"删除",@"举报",nil];
[myActionSheet showInView:self.view];
}
-(void)willPresentActionSheet:(UIActionSheet *)actionSheet{
NSLog(@"actionSheet.subviews:%@",actionSheet.subviews);
for (UIView *view in actionSheet.subviews) {
if (view.tag == 2) {
UIButton *button = (UIButton *) view;
//改变背景
[button setBackgroundImage:[button backgroundImageForState:UIControlStateHighlighted] forState:UIControlStateNormal];
//改变颜色
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
//btn的选择状态,否则选择后不变背景
[button setSelected:YES];
}
}
}
打印出来`actionSheet.subviews:(
)`
为什么为空啊 明明有3个按钮
高洛峰2017-04-17 15:38:27
以前的UIAlertView是可以拿到subview的,但後來拿不了了。
蘋果這樣做的目的是不想讓開發者去定義這些View。
所以說,不是呼叫subviews方法就一定可以拿到裡面的View的。
蘋果要做到這一點,我猜測有兩種方式:
1.根本沒有subview,哪些按鈕使用的是Layer或重繪。
2.重載這些類別的subviews方法讓它傳回空數組。 (這個可能性最大)
自訂的方式蘋果已經限制了,這可能比較折騰。
可以試試這個函式庫,支援自訂View:JGActionSheet