Swift Bridging-Header Objective-C presentViewController
Posted
技术标签:
【中文标题】Swift Bridging-Header Objective-C presentViewController【英文标题】: 【发布时间】:2015-07-09 23:44:09 【问题描述】:我正在尝试使用仅在 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
来自斯威夫特
var instanceOfCustomObject: AlertSelector = AlertSelector()
instanceOfCustomObject.someProperty = "Hello World"
print(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()
【问题讨论】:
【参考方案1】:您的AlertSelector
类不是UIViewController
的子类。这就是为什么您不能从AlertSelector
的实例调用[self presentViewController:view animated:YES completion:nil];
。
将视图控制器参数添加到您的 someMethod
方法并从该方法而不是 self 中显示。
【讨论】:
【参考方案2】:presentViewController 是 UIViewController 的一个方法。您的 AlertSelector 类不是 UIViewController。
【讨论】:
【参考方案3】:这与桥接头无关。是UIViewController
实现了presentViewController:
而不是NSObject
,因此编译器会抱怨,因为NSObject
的接口上不存在presentViewController:
方法。
可能的解决方案
要么自己实现presentViewController:
(这是一项艰巨的任务),要么让AlertSelector
从UIViewController
扩展
.h
@interface AlertSelector : UIViewController
【讨论】:
以上是关于Swift Bridging-Header Objective-C presentViewController的主要内容,如果未能解决你的问题,请参考以下文章
Swift:通过 Bridging-Header 文件导入时找不到 CorePlot-CocoaTouch.h 文件
Swift Bridging-Header Objective-C presentViewController