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个按钮
UIAlertView는 하위 뷰를 얻을 수 있었지만 나중에는 더 이상 불가능했습니다.
Apple의 목적은 개발자가 이러한 뷰를 정의하지 못하도록 하는 것입니다.
따라서 subviews 메서드를 호출하면 확실히 View를 내부로 가져올 수 있습니다.
Apple이 이를 수행하려면 두 가지 방법이 있을 것 같습니다.
1. 하위 뷰가 전혀 없고, 어떤 버튼이 레이어를 사용하거나 다시 그리기를 사용하는지.
2. 빈 배열을 반환하도록 이러한 클래스의 하위 뷰 메서드를 오버로드합니다. (이것이 가장 가능성이 높습니다)
Apple은 사용자 정의 방식을 제한했기 때문에 다소 까다로울 수 있습니다.
사용자 정의 보기를 지원하는 이 라이브러리를 사용해 볼 수 있습니다: JGActionSheet