首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每次在UIImagePickerController()的dismiss()之后调用viewDidLoad()

在每次调用UIImagePickerController()的dismiss()之后调用viewDidLoad()是不合适的做法。viewDidLoad()是UIViewController生命周期中的一个方法,它在视图控制器的视图加载完成后调用,通常只会在视图控制器初始化时调用一次。而dismiss()是用于关闭模态视图控制器的方法,当调用dismiss()后,模态视图控制器会被移除,返回到上一个视图控制器。

如果需要在dismiss()之后执行一些操作,可以考虑使用代理模式或闭包回调来实现。具体的实现方式如下:

  1. 使用代理模式: 在模态视图控制器的定义中,声明一个代理协议,并定义一个代理属性。在dismiss()之后,通过代理方法通知上一个视图控制器执行相应的操作。
代码语言:txt
复制
// 在模态视图控制器中定义代理协议
protocol ImagePickerDelegate: class {
    func imagePickerDidDismiss()
}

class ImagePickerViewController: UIViewController {
    weak var delegate: ImagePickerDelegate?

    // 在dismiss()之后调用代理方法
    func dismissImagePicker() {
        dismiss(animated: true) {
            self.delegate?.imagePickerDidDismiss()
        }
    }
}

class MainViewController: UIViewController, ImagePickerDelegate {
    // 在MainViewController中实现代理方法
    func imagePickerDidDismiss() {
        // 在dismiss()之后执行相应操作
        viewDidLoad()
    }

    // 弹出模态视图控制器
    func presentImagePicker() {
        let imagePicker = ImagePickerViewController()
        imagePicker.delegate = self
        present(imagePicker, animated: true, completion: nil)
    }
}
  1. 使用闭包回调: 在模态视图控制器的定义中,声明一个闭包属性。在dismiss()之后,通过闭包回调执行相应的操作。
代码语言:txt
复制
class ImagePickerViewController: UIViewController {
    var dismissCompletion: (() -> Void)?

    // 在dismiss()之后调用闭包回调
    func dismissImagePicker() {
        dismiss(animated: true) {
            self.dismissCompletion?()
        }
    }
}

class MainViewController: UIViewController {
    // 弹出模态视图控制器
    func presentImagePicker() {
        let imagePicker = ImagePickerViewController()
        imagePicker.dismissCompletion = {
            // 在dismiss()之后执行相应操作
            self.viewDidLoad()
        }
        present(imagePicker, animated: true, completion: nil)
    }
}

以上是两种常见的实现方式,根据具体情况选择适合的方式来处理dismiss()之后的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Swift| 基础语法(五)

    前言 总结下 swift下基础语法,里面涉及到:常量&变量、Swift中数据类型、逻辑分支、循环、字符串相关、数组和字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift...register(MyNewTableViewCell.self, forCellReuseIdentifier: "myCell") 当注册了Cell之后没有可重用Cell时会自动创建,并且不能在需要时手动创建...可以自定义cell中处理点击状态下显示 var label1 :UILabel? var label2 :UILabel?...因为Swift中,所有对象构造器默认都是public,所以需要重写你init让其成为私有的。 这样就保证像如下代码编译报错,不能通过。 六、从相册选择照片或者拍照 ?...(_ picker:UIImagePickerController){ picker.dismiss(animated:true, completion:nil) }

    2K30

    【iOS开发】修改 present 出来 ViewController 状态栏颜色

    开发过程中,如果我们需要给用户提供一个浏览器功能支持、又或者需要让用户来从系统相册挑选图片,那么利用 UIKit 给我们提供现成 SFSafariViewController 和 UIImagePickerController...),这时候我们需要一个默认自身状态栏永远为黑色 SFSafariViewController 或 UIImagePickerController 下面以 UIImagePickerController...class CustomImagePC: UIImagePickerController { override func viewDidLoad() { super.viewDidLoad...UIImagePickerController ,代码里面设定了:这个页面被加载之后,状态栏设置为黑色,页面即将消失时,状态栏再转为白色。...调用时候,直接 let pc = CustomImagePC() SFSafariViewController 同理,当然你也可以在这些代码里插入其他内容,如果你想更高程序地定制一个 UIImagePickerController

    1.2K20

    iOS 小技能:app嵌入H5页面的通用模版

    ,当模态出N个ViewController之后,只需要dismiss任意一个,都会dismiss之后所有模态试图 。...I 解决WebVC调摄像头之后dismiss问题 解决包含WebView控制器调摄像头之后被UIDocumentMenuViewController干掉问题 1.1 问题分析 UIDocumentMenuViewController...消失时调用不仅调用了自己,dismissViewControllerAnimated,还调用了,上层或者上上层presentingViewControllerdismissViewControllerAnimated...除非用户自己要求退出self.exitKNBaseWebViewControllerflagged = yes 或者 当想dismiss掉当前ViewController时候,不能调用本身dismissViewControllerAnimated...,直接调用父类dismissViewControllerAnimated 重写拥有web View控制器dismiss 方法 #if 1 -(void)dismissViewControllerAnimated

    95520

    iOS_38_手势

    ,才干够接收和处理事件 父类响应者中定义事件处理接口例如以下: 触摸事件处理四个方法例如以下:(仅仅要实现,系统会自己主动调用) 一个UITouch对象,代表着一根手指,手指移动,...特殊情况:要尤其注意 找到了事件最佳处理者之后,就是响应者链条了 默认是会调用其[super touchesXXX],这个super就是上一个响应者 即:官方文档中next responder...@selector(taping)]; // 2.设置手势代理,目的是:决定手势仅仅有特定场合才会被识别(触发监听方法) tap.delegate = self; // 3...,不松手,能触发手势之前,可同意移动范围,50px范围内长按有效,默认是10px longPress.allowableMovement = 50; // 2.为nanaImgView...UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);}// 保存图片操作之后就会调用本方法

    92320

    Runtime运用:埋点统计

    2、渲染时间 UIViewController生命周期中,Viewdidload和Viewdidappear之间时间可以认为是“UI渲染时间”,我们可以通过统计二者之间时间差距来统计页面的渲染时间...对应返回上一个界面的方式是pop和dismiss,一般pop或者dismiss方法调用之后,随后就会调用dealloc方法,将UIViewController内存情况,内存得到释放,如果无法调用dealloc...方法,每个class导入时候,只要实现了这方法,就会调用而且只调用一次这个方法。...load方法中,将UIViewController生命周期里几个method都通过method swizzling替换成我们自定义方法,自定义方法中进行埋点,从而达到统计和监测目的。...其中ARC中不能显式调用dealloc方法,所以用NSSelectorFromString来达到我们目的 三、渲染时间统计 - (void)ht_ViewDidLoad{ long current

    85820

    iOS dispatch_after延迟执行导致延迟dealloc

    我们新建一个NewViewController,开始ViewController写如下代码 - (void)viewDidLoad { [super viewDidLoad];..."); [self dismissViewControllerAnimated:YES completion:nil]; } 运行之后,我们一跳进newVC里面返回,这时候: ?...image.png 结果说明我们dismiss时候,newVC还没有被释放,dealloc方法dispatch_after延迟方法执行之后才会走,原因就是dispatch_after强引用了self...接下来,我们dispatch_after里把 self 用 __weak修饰,block里把self改为weakself,我们还是一样操作流程,看看结果: - (void)viewDidLoad {...使用注意 虽然dispatch_after里直接调用self不会造成循环引用,但当我们dispatch_after延迟时间过长时候,需要考虑是否要及时释放当前对象,如果需要,尽量使用weakSelf这种方式

    2K20

    函数响应式编程及ReactiveObjC学习笔记 (四)

    今天我们继续看其他类别 UIImagePickerController+RACSignalSupport.h #import @class RACDelegateProxy...RAC自带方法只能设置一个代理 // 不过其实RAC其实也只为UIImagePickerController处理了UIImagePickerControllerDelegate而已, 所以这里会有警告先不管它...// 后面我们再想想其他方式, 是重新写一个UIImagePickerController分类还是重写方法什么 imgPickerController.delegate...是imgPickerController本身, 转义后直接拿来dismiss即可 选择图片后x是一个数组, 第一个是imgPickerComtroller, 第二个是选择image UISegmentedControl...rac_prepareForReuseSignal; @end NS_ASSUME_NONNULL_END 有一个rac_prepareForReuseSignal属性, 看字面意思就很清除准备复用时调用

    90221

    关于 循环引用问题

    官方文档 block是一个对象,创建时内存默认分配在栈上,不是堆上,所以它作用域仅限创建时候的当前上下文(函数, 方法...), 当我们该作用域外调用该block时, 程序就会崩溃....报错 根据提示需要使用一个strong类型,因此Block里头使用__strong转一下weakSelf即可: - (void)viewDidLoad { [super viewDidLoad...Analyze主要分析以下四种问题: 1、逻辑错误:访问空指针或未初始化变量等; 2、内存管理错误:如内存泄漏等; 3、声明错误:从未使用过变量; 4、Api调用错误:未包含使用库和框架。...原理:MLeaksFinder是从UIViewController入手,UIViewControllerPOP或dismiss之后该控制器及其上view,viewsubviews都会被释放掉,MleaksFinder...就是控制器POP或dismiss之后去查看该控制器和其上view是否都被释放掉。

    3.3K20

    iOS开发之表视图爱上CoreData

    点击添加按钮时首先得通过上下文获取我们实体对象,获取完实体对象后再给实体对象属性赋上相应值,最后调用上下文save方法来存储一下我们实体对象。..., nonatomic) NSFetchedResultsController *fetchedResultsController;     b.​viewDidLoad中获取上下文 1 2 3 4...= application.delegate; self.managedObjectContext = [delegate managedObjectContext];     c.viewDidLoad...   @end ​     b.进行委托回调注册,viewDidLoad中添加 1 2 //注册回调,使同步生效 self.fetchedResultsController.delegate...:^{}]; }       (4)选完图片把头像设置成用户选中按钮,并dismiss到原来界面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //实现图片回调方法,从相册获取图片

    2.2K80

    【IOS开发基础系列】UIViewController专题

    4 controller调用viewDidLoad方法来执行一些加载时(加载时一词,相对于编译时、运行时)任务。         ...程序可以重载loadView 和 viewDidLoad来执行一些任务:     卸载循环:     1 程序收到内存警告;     2 每个view controller调用 didReceiveMemoryWarning...刚才demo基础上,这次我们用一个向上划动手势来吧之前呈现ModalViewController给dismiss掉~当然是交互式切换,可以半途取消那种。         ...这个布尔值将在监测到手势开始时被设置,我们之后会在调用返回这个InteractiveTransition时候用到。     ...2.计算百分比,我们设定了向下划动400像素或以上为100%,每次手势状态变化时根据当前手势位置计算新百分比,结果被限制0~1之间。

    53030

    iOS 小技能:Method Swizzling (交换方法IMP)

    交换两个方法实现一般写在分类load方法里面,因为load方法会在程序运行前加载一次,而initialize方法会在类或者子类 第一次使用时候调用,当有分类时候会调用多次。...不要在load里面取加载对象,因为我们再load调用时候根本就不确定我们对象是否已经初始化了,所以不要去做对象初始化 I Method Swizzling基础 Objective-CRuntime...Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息唯一依据是selector名字。因此我们可以在运行时偷换selector对应方法实现,达到给方法挂钩目的。...例如:A Present B, 有时因为业务逻辑需要,必须在viewWillAppear, viewDidAppear里写一些代码,当B 调用dismiss方法时候, A这个两个方法不会触发,...我想法是B 写一个block,B调用dismiss之前,利用block回调A相关业务逻辑代码。如果有其他更好方法请告诉我。

    1.6K10

    解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

    原文发表博客 肘子Swift记事本视图变化在前、状态变化在后 SwiftUI 中,某些可编程控件执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好选择,特别是没有屏蔽手势取消 Sheet 情况下。...() { super.viewDidLoad() interactivePopGestureRecognizer?....随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使最新版本中,一些对 UIKit(AppKit)进行二次包装控件中,仍有不少细节处理不到位问题。

    688110
    领券