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:
(这是一项艰巨的任务),要么让 AlertSelector
从 UIViewController
扩展
.h
@interface AlertSelector : UIViewController
我正在尝试使用仅在 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:
(这是一项艰巨的任务),要么让 AlertSelector
从 UIViewController
.h
@interface AlertSelector : UIViewController