検索

ホームページ  >  に質問  >  本文

ios - actionSheet的subviews一直为空 为什么

  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个按钮

大家讲道理大家讲道理2767日前698

全員に返信(1)返信します

  • 高洛峰

    高洛峰2017-04-17 15:38:27

    UIAlertView は以前はサブビューを取得できましたが、その後は取得できなくなりました。
    Apple の目的は、開発者にこれらのビューを定義させないことです。
    したがって、subviews メソッドを呼び出すことで、内部の View を確実に取得できます。

    Apple がこれを行うには、次の 2 つの方法があると思います:
    1. サブビューがまったくなく、どのボタンがレイヤーまたは再描画を使用するか。
    2. これらのクラスのサブビュー メソッドをオーバーロードして、空の配列を返すようにします。 (これが最も可能性が高いです)

    Apple はカスタマイズの方法を制限しているため、これは少し面倒かもしれません。
    カスタム ビューをサポートするこのライブラリを試すことができます: JGActionSheet

    返事
    0
  • キャンセル返事