学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > ios >

第七节 利用ModalViewController切换View(2)

设置字体:
----------------------------------

 
    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 来设置不同的背景色。
----------------------------------
课程列表
重点难点
赞助链接