【问题标题】:Button Handler Syntax for Dismissing ViewController in IOSIOS 中关闭 ViewController 的按钮处理程序语法
【发布时间】:2019-06-11 21:49:50
【问题描述】:

我在代码中创建了一个自定义 UIBarButton 来关闭自定义 viewController。但是,编译器不喜欢我的语法。

这是创建 UIBarButtonItem 的代码:

//grab VC
detailC* detailVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"detailVC"]; //This custom VC
is a sub-class of UIViewController

//Create barbuttonitem
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]
                                    initWithImage:[UIImage imageNamed:@"close.png]
                                    style:UIBarButtonItemStylePlain
                                    target:self
                                   action:@selector(dismss:detailVC)];//ERROR HERE

//Here is the dismiss method: 
-(void) dismissVC: (UIViewController*) vc {

  [vc dismissViewControllerAnimated:YES completion:nil];
}

编译器的错误是:'Expected :'

insert : 有一个修复选项。如果我选择修复,它会将选择器更改为:

action:@selector(dismissVC: controller:)];

这没有意义,还会发出警告'Undeclared Selector"

我做错了什么?

注意:这是在 appDelegate 中发生的,所以我不能使用 self 来关闭 VC。

【问题讨论】:

    标签: ios objective-c selector dismissviewcontroller


    【解决方案1】:

    您尝试做的事情从根本上说是不正确的。您的dismissVC: 方法可以采用的唯一有效参数是触发操作的UIBarButtonItem。您不能将视图控制器传递给该方法。

    但你不需要。既然你想解除“自我”,只需在self 上调用dismissViewController

    //Create barbuttonitem
    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]
                                    initWithImage:[UIImage imageNamed:@"close.png"]
                                    style:UIBarButtonItemStylePlain
                                    target:self
                                    action:@selector(dismiss:)];
    

    这是更新后的方法:

    - (void)dismiss:(UIBarButtonItem *)button {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    

    【讨论】:

    • 可以自己在appDelegate中工作吗?更改为 self,我得到 No visible @interface for 'AppDelegate' 声明选择器 'dismissViewControllerAnimated:completion:' 错误
    • 我无法让自己工作,但我将其标记为正确,以指出处理程序的正常运行。我没有使用 self,而是通过单独的方法获取了对呈现视图控制器的引用
    • 我假设这个按钮代码和dismiss 方法在需要关闭的视图控制器中。我错过了你问题的最后一行。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多