iOS5: Как использовать объект UIActionSheet в классе NSObject и заставить его появляться в другом представлении? - PullRequest
1 голос
/ 14 марта 2012

У меня есть общий метод, который вызывает сообщение «Свяжитесь с нами» (UIActionSheet). Поскольку я использую один и тот же код в нескольких классах, я пытаюсь перейти к его собственному классу (я использовал тип класса NSObject).

Вопрос в том, как заставить UIActionSheet появляться в NIB того класса, который требует этого?

Я использую этот код в классе NSObject:

    UIActionSheet *msg = [[UIActionSheet alloc] 
                      initWithTitle:@"Consultation Request" 
                      delegate:self 
                      cancelButtonTitle:@"Cancel"  
                      destructiveButtonTitle:nil  
                      otherButtonTitles:@"Email",@"Text",@"Office Phone", nil];

msg.actionSheetStyle = UIActionSheetStyleBlackOpaque;

[msg showInView:self.view];

Очевидно, что последняя строка неверна, потому что "view" - это NIB исходного класса.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Есть 3 варианта.

1. Свойство

Вы можете использовать свойство, чтобы сообщить NSObject, где должен отображаться ваш лист действий:

///// MyObject.h

@property (nonatomic, strong /* or rerain if not ARC */) UIView *viewForActionSheet;

//// MyObject.m

@synthesize viewForActionSheet;

...

[msg showInView:self.viewForActionSheet];


//// MyViewController.m

MyObject *obj = [[MyObject alloc] init];
obj.viewForActionSheet = self.view;
[obj presentMyActionSheet];

2. Делегат

Это более продвинутый способ, использующий протокол obj-c (a.k.a. делегат)

//// MyObject.h

@protocol MyObjectDelegate <NSObject>
@required

- (UIView *)viewForActionSheet;

@end;

@interface MyObject : NSObject

...

@property (nonatomic, unsafe_unretained /* or assign if not ARC */) id <MyObjectDelegate> delegate;

@end

//// MyObject.m

@synthesize delegate;

...

[msg showInView:self.delegate.viewForActionSheet];

//// MyViewController.m

- (UIView *)viewForActionSheet {
    return self.view;
}

3. Окно

Самый простой способ, но не самый безопасный

//// MyObject.m

[msg showInView:[[UIApplication sharedApplication] keyWindow]];
0 голосов
/ 14 марта 2012

Вы можете использовать окно, чтобы показать лист действий.В этом случае вам на самом деле не нужно никакого представления.Везде, где вы хотите лист действий, просто покажите его поверх окна (конечно, если вам не нужен вид, внутри действия кнопок листа действий).

...