gpt4 book ai didi

iOS5 : How to use a UIActionSheet object in an NSObject class and cause it to appear in another view?

转载 作者:行者123 更新时间:2023-12-01 18:01:11 26 4
gpt4 key购买 nike

我有一个常见的方法会导致出现“联系我们”(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。

最佳答案

有 3 个选项。

1. 属性(property)

您可以使用属性告诉您的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 协议(protocol)(又名委托(delegate))的更高级方式
//// 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]];

关于iOS5 : How to use a UIActionSheet object in an NSObject class and cause it to appear in another view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com