Swift 桥接头 Objective-C presentViewController

Swift Bridging-Header Objective-C presentViewController

我正在尝试使用仅在 Objective-C 中可用的视图控制器。我已经设置了桥接头,但是当我 运行 我的方法时它不包含 presentViewController 并给出错误 No visible @interface for 'AlertSelector' declares the selector 'presentViewController...'

.m

#import "AlertSelector.h"

@implementation AlertSelector : NSObject

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
    UIAlertController * view=   [UIAlertController
                             alertControllerWithTitle:@"My Title"
                             message:@"Select you Choice"
                             preferredStyle:UIAlertControllerStyleActionSheet];

    UIAlertAction* ok = [UIAlertAction
                     actionWithTitle:@"OK"
                     style:UIAlertActionStyleDefault
                     handler:^(UIAlertAction * action)
                     {
                         //Do some thing here
                         [view dismissViewControllerAnimated:YES completion:nil];

                     }];
    UIAlertAction* cancel = [UIAlertAction
                         actionWithTitle:@"Cancel"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [view dismissViewControllerAnimated:YES completion:nil];

                         }];

[view addAction:ok];
[view addAction:cancel];
[self presentViewController:view animated:YES completion:nil];
}

.h

@interface AlertSelector : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

来自Swift

var instanceOfCustomObject: AlertSelector = AlertSelector()
    instanceOfCustomObject.someProperty = "Hello World"
    print(instanceOfCustomObject.someProperty)
    instanceOfCustomObject.someMethod()

您的 AlertSelector class 不是 UIViewController 的子class。这就是为什么您不能从 AlertSelector.

的实例调用 [self presentViewController:view animated:YES completion:nil]; 的原因

将视图控制器参数添加到您的 someMethod 方法并从中呈现而不是自身。

presentViewController是UIViewController的一个方法。您的 AlertSelector class 不是 UIViewController。

这与桥接头无关。 UIViewController 实现了 presentViewController: 而不是 NSObject,因此编译器会报错,因为方法 presentViewController: 不存在于 NSObject 的接口上。​​

可能的解决方案

要么自己实现 presentViewController:(这是一项艰巨的任务),要么让 AlertSelectorUIViewController

扩展

.h

@interface AlertSelector : UIViewController