Swift Bridging-Header Objective-C presentViewController

Я пытаюсь использовать контроллер представления, доступный только в Objective-C. Я настроил свой Bridging-Header, но когда я запускаю свой метод, он не включает 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()

person Marcus    schedule 09.07.2015    source источник


Ответы (3)


Ваш класс AlertSelector не является подклассом UIViewController. Вот почему вы не можете вызывать [self presentViewController:view animated:YES completion:nil]; из экземпляра AlertSelector.

Добавьте параметр контроллера представления в свой метод someMethod и представьте его вместо себя.

person Tyler    schedule 09.07.2015

presentViewController — это метод UIViewController. Ваш класс AlertSelector не является UIViewController.

person gnasher729    schedule 09.07.2015

Это не имеет ничего общего с заголовком моста. Именно UIViewController реализует presentViewController:, а не NSObject, поэтому компилятор жалуется, что метод presentViewController: отсутствует в интерфейсе NSObject.

Возможное решение

Либо реализуйте presentViewController: самостоятельно (что является сложной задачей), либо пусть AlertSelector расширяется из UIViewController

.h

@interface AlertSelector : UIViewController

person E-Riddie    schedule 09.07.2015