我实现了一个创建自定义UIAlertView
的功能。我已将UIView
扩展为category
,并且我正在创建我的方法,名为
- (void)showCustomAlertWithTitle:(NSString *)title andMessage:(NSString *)message
我想在自定义alertview中的按钮中添加一个选择器,但是这个选择器包含在我的UIViewController
中。我应该将选择器移动到类别中,还是以某种方式在viewcontroller
中引用它?如果我将选择器移到类别中,我将无法访问navigationcontroller
...
- (void)showCustomAlertWithTitle:(NSString *)title andMessage:(NSString *)message
{
UIView *alert = [[UIView alloc] initWithFrame:CGRectMake((self.frame.size.width/2)-100, (self.frame.size.height/2)-50, 200, 100)];
UIButton *confirmButton = [[UIButton alloc] initWithFrame:CGRectMake(30,40, 50, 50)];
[confirmButton addTarget:self action:@selector(delete:) forControlEvents:UIControlEventTouchUpInside];
[alert addSubview:confirmButton];
[self addSubview:alert];
}
MyViewController.m 中的选择器方法
- (IBAction)delete:(id)sender
{
[[self.view viewWithTag:-7] removeFromSuperview];
self.navigationController.navigationBar.hidden = NO;
}
答案 0 :(得分:1)
您正在迎合类别的限制。您无法将实例变量添加到类别中的类中,因此您没有一种干净的方法来保存指向您的呈现视图控制器的指针。
我建议在您的类别中添加新方法:
- (void) addButtonWithTitle: (NSString*) title
target: (id) target
action: (SEL) action
forControlEvents: (UIControlEvents)controlEvents;
然后在该方法的实现中,使用传入的参数来创建和配置按钮。该方法包括目标,选择器和应触发操作的事件列表。
答案 1 :(得分:0)
选择器应该在viewController中实现,因为您可以在不同的viewControllers中使用alertView。因此,有时您需要执行特定于该viewController的逻辑。此外,MVC 101禁止您尝试在UIView子类中实现操作。因此,viewController应该再次实现该操作。