美文网首页
iOS 修改原生弹出框

iOS 修改原生弹出框

作者: L小杰 | 来源:发表于2017-04-10 17:10 被阅读816次

Objective-C

开发过程中,一般需要用到弹出框提醒用户,使用系统自带的AlertController最方便快捷,但有时候往往需要自定义其中的某些样式。如图:


1.png

我们可以通过递归的方式找到alertview然后进行自定义

    //递归找到title
    UIView *messageParentView = [self getParentViewOfTitleAndMessageFromView:alert.view];
    if (messageParentView && messageParentView.subviews.count > 1) {
        DLog(@"%@",messageParentView.subviews);
    }
- (UIView *)getParentViewOfTitleAndMessageFromView:(UIView *)view {
    for (UIView *subView in view.subviews) {
        if ([subView isKindOfClass:[UILabel class]]) {
            return view;
        }else{
            UIView *resultV = [self getParentViewOfTitleAndMessageFromView:subView];
            if (resultV) return resultV;
        }
    }
    return nil;
}

通过打印的subviews

[
<UILabel: 0x7f90987d2e90; frame = (0 0; 0 0); text = '1、订单交易完成后雨露才会进入账户(线上交易为快递...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x608000482a80>>,
<UILabel: 0x7f90987b1d00; frame = (0 0; 0 0); text = ''; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x608000095090>>,
<UIView: 0x7f90987cd8d0; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x60800043c3e0>>,
<UIView: 0x7f90987e4500; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x60800043efe0>>
]

找到前2个Label分别是title和message。

文章终于有人看了看到评论有疑问补个swift版的

swift

道理都是通的

 if let view = self.getParentViewOfTitleAndMessageFromView(view: alertC.view) {
            print(view.subviews)
        }
func getParentViewOfTitleAndMessageFromView(view:UIView) -> UIView? {
        for item in view.subviews {
            if item.isKind(of: UILabel.self) {//如果subview包含label直接返回
                return view
            }else{//继续遍历 找到包含label的view
                if let resultView = self.getParentViewOfTitleAndMessageFromView(view: item) {
                    return resultView
                }
            }
        }
        return nil
    }

通过打印的subviews

[<UILabel: 0x15fe11e00; frame = (0 0; 0 0); text = '标题'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4091800>>,
 <UILabel: 0x15fe12480; frame = (0 0; 0 0); text = '内容'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1c4092f70>>,
 <UIView: 0x15fe10690; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x1c422ac20>>, 
 <UIView: 0x15fe12de0; frame = (0 0; 0 0); clipsToBounds = YES; layer = <CALayer: 0x1c422a060>>]

找到前2个Label分别是title和message。

相关文章

  • iOS 修改原生弹出框

    Objective-C 开发过程中,一般需要用到弹出框提醒用户,使用系统自带的AlertController最方便...

  • 自定义android弹出框

    概述 android上原生的弹出框和ios原生的弹出框视觉差距较大,为了与ios的视觉效果类似,所以封装了这个库。...

  • iOS中UIAlertController的使用

    弹出框在移动端开发中使用是比较频繁的控件之一 1、在iOS8.0之前使用最多的原生弹出框控件是:UIAlertVi...

  • iOS修改js弹出框样式

    ios 中webview默认的弹框标题为链接域名,比较难看,假如我们想把标题改为“提示消息”要怎么做呢?可以通过给...

  • 「React Native」调用原生打电话

    一、场景 点击某个按钮,弹出框提示是否拨打某个电话号码,点击确定调用原生(android/ios)拨号界面,并填充...

  • 2018-12-10

    tesCamera(){ let that =this; //调用原生系统弹出按钮选择框let page ...

  • UIAlertController的简单使用

    背景:在UITableView的cell点击时弹出对话框并可以修改数据。由于UIAlertView在iOS9之后被...

  • IOS9+基础之警报框弹出和操作表弹出

    IOS9+基础之警报框弹出和操作表弹出 代码如下

  • flutter-alert

    弹出一个iOS样式的弹出框ios-alert.png代码: 默认样式的默认样式.pngCupertinoAlert...

  • SSM框架的(CRUD)_修改_创建员工修改模态框22

    修改逻辑 1、点击编辑 2、弹出用户修改的模态框(显示用户信息) 3、点击更新,完成用户修改 一、新增修改模态框 ...

网友评论

      本文标题:iOS 修改原生弹出框

      本文链接:https://www.haomeiwen.com/subject/ulteattx.html