我为ToastView创建了一个iOS类(类似于Android的吐司),它在屏幕底部显示一个消息栏。我在ToastView上添加了一个按钮,解决了我原来的错误。用于触摸按钮的NSLog显示在控制台中,但是当单击按钮时我需要将BOOL值发送回HomeViewController并且我不确定如何使用此按钮在两者之间进行通信。有什么帮助吗?
在ToastView.h中:
+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;
+ (void)undoButtonClicked:(id)sender;
ToastView.m中的:
//shows the "toast" message
+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration {
//code to show message
UIButton *undoButton = [[UIButton alloc] initWithFrame:CGRectMake(toast.frame.size.width - 60.0, toast.frame.size.height - 35.0, 40, 20)];
undoButton.backgroundColor = [UIColor lightGrayColor];
[undoButton addTarget:self action:@selector(undoButtonClicked:) forControlEvents:UIControlEventTouchDown];
}
+(void) undoButtonClicked:(id)sender {
NSLog(@"UNDO BUTTON TOUCHED");
}
我在HomeViewController中使用以下代码调用ToastView:
[ToastView showToastInParentView:self.view withText:@"TOAST MESSAGE!" withDuaration:5.0];
答案 0 :(得分:1)
您的课程可能如下所示,以便按照您的意愿工作:
@interface ToastView : UIView
- (void)undoButtonClicked:(id)sender;
@end
@interface NotToastView : UIView
@property (weak) ToastView *toastView;
@end
@implementation NotToastView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
UIButton *undoButton = [UIButton buttonWithType:UIButtonTypeCustom];
[undoButton setFrame:self.bounds];
[undoButton addTarget:self action:@selector(undoButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:undoButton];
}
return self;
}
- (void)undoButtonClicked:(id)sender {
[self.toastView undoButtonClicked:sender];
}
@end
最好在这里使用委托协议,而不是要求特定的类。上面的代码没有明确地为toastView
属性设置值。我们希望您在UIViewController
某处构建这些内容并自行设置值,而不是依靠NotToastView
来设置自己的ToastView
。
答案 1 :(得分:1)
查看更新后的代码,问题来自undoButtonClicked:
方法,在您的情况下是一种类方法(前缀为" +")。
您希望通过使用" - "更改前缀来使其成为对象方法。这样,类知道它被调用在这个类的实例化对象上。当您使用addTarget:action:forControlEvents:
时,该操作是目标的选择器。
作为Apple says:
选择器是用于选择要为对象执行的方法的名称
所以它需要是一个对象方法,而不是一个类方法。
您的代码应如下所示:
·H:
+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration;
- (void)undoButtonClicked:(id)sender;
的.m:
//shows the "toast" message
+ (void)showToastInParentView: (UIView *)parentView withText:(NSString *)text withDuaration:(float)duration {
//code to show message
UIButton *undoButton = [[UIButton alloc] initWithFrame:CGRectMake(toast.frame.size.width - 60.0, toast.frame.size.height - 35.0, 40, 20)];
undoButton.backgroundColor = [UIColor lightGrayColor];
[undoButton addTarget:self action:@selector(undoButtonClicked:) forControlEvents:UIControlEventTouchDown];
}
-(void) undoButtonClicked:(id)sender {
NSLog(@"UNDO BUTTON TOUCHED");
}