button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(100,300,100,100); button.tag = 0; [button setTitle:@"取消" forState:UIControlStateNormal]; // 按钮事件对应函数 [button addTarget:self action:@selector(dismiss:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } 程序启动的时候依然是先显示ModalViewController view,按下任何一个按钮,将关闭该view。按下“绿色”按钮,设置背景为绿色,按下“灰色”按钮时,设置背景为灰色。“取消”的时候什么也不做。 委托处理用下面的函数实现,当参数inColor 为nil 的时候代表取消。 -(void)selectColor:(UIColor*)inColor; 委托代理的实例用id 变量表示。 @interface CustomViewController : UIViewController { id colorSelectDelegate; } 设置该变量的函数如下。 -(void)setColorSelectDelegate:(id)inDelegate { colorSelectDelegate = inDelegate; } 另外如上面viewDidLoad 所示,按钮的tag 分别为0、1、2。按钮按下时调用的函数中由不同的tag 来发送不同的UIColor实例到colorSelectDelegate 上。 -(void)dismiss:(id)inSender { UIView* view = (UIView*)inSender; UIColor* requestColor = nil; if (view.tag == 1) requestColor = [UIColor greenColor]; if (view.tag == 2) requestColor = [UIColor grayColor]; [colorSelectDelegate selectColor:requestColor]; } 这是不使用UIButton* 而是用UIView* ,是因为tag 属性被定义在UIView 类中,不需要必须转换为UIButton 类。 另外这样一来,该函数在UIButton 以外的情况下也能被使用。 如果想检查id 是什么类性的可以使用isKindOfClass: 方法。 接收到具体的参数inColor 更换背景色,并关闭ModalViewController view。 -(void)selectColor:(UIColor*)inColor { if (inColor != nil) self.view.backgroundColor = inColor; [self dismissModalViewControllerAnimated:YES]; } 另外,在调用presentModalViewController 之前(显示ModalViewController view 之前),需要设定委托的实例。 - (void)applicationDidFinishLaunching:(UIApplication *)application { controller = [[CustomViewController alloc] init]; [window addSubview:controller.view]; [window makeKeyAndVisible]; // 创建ModalViewController view 的Controller CustomViewController* controllerB = [[CustomViewController alloc] init]; // 设置背景色为红色 controllerB.view.backgroundColor = [UIColor redColor]; // 设置委托实例 [controllerB setColorSelectDelegate:controller]; // 显示ModalViewController view [controller presentModalViewController:controllerB animated:YES]; [controllerB release]; } 编译一下,程序启动后显示红色背景的ModalViewController view,点击绿色按钮后,原先的view的背景变为绿色,点击灰色,显示灰色的背景,而点击取消,那么将显示原先蓝色的背景。 这样的形式,就是将按钮的动作委托给原先view的Controller 来处理了。根据送来的UIColor 来设置不同的背景色。 |