UI高级组件

  • 事件响应

  • 子视图如果绑定了事件即优先级最高 如果没有则触发父视图的事件
  • 子视图接收到了事件后可以放弃事件响应 触发父视图的事件

例子:

 UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pressAct:)];
 self.con.userInteractionEnabled = YES;
 gesture.numberOfTapsRequired = 1;
 gesture.numberOfTouchesRequired = 1;
 [self.con addGestureRecognizer:gesture];
   - (void)pressAct:(UITapGestureRecognizer*)ges{
     //每个UIBiew对象都有一个nextResponder方法 放弃当前事件响应
       [ges.view nextResponder];
   }

  • 导航控制器

  • 创建导航控制器
   //创建一个根视图控制器
  UIViewController* root = [[ViewController alloc] initWithNibName:@"VCxib" bundle:[NSBundle mainBundle]];
  //创建导航控制器 托管视图控制器
  UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:root];
  //将导航控制器作为视图的根控制器
  self.window.rootViewController = nav;
  • 自定义当前导航元素项
 //    navigationItem代表当前导航元素项对象  可以设置按钮 标题等一系列东西
 self.navigationItem.title = @"home";
 //    自定义一个按钮视图作为导航按钮
 UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 btn.frame = CGRectMake(0, 0, 100, 30);
 btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
 [btn setTitle:@"hello" forState:UIControlStateNormal];
 //    UIbarButtonItem可以创建系统带的 也可以自定义一个视图作为按钮
 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
 //    系统自带按钮类型风格也会经常用
 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pressRight)];
  • navigationBarHidden = YES;可以隐藏导航栏

  • 注:self.navigationController中可以获取到item bar controller对象

  • navigationController.navigationBar.translucent = NO;表示导航栏不透明 默认为YES

  • 导航控制器界面切换

  • 在创建窗口时用navigationController中托管了一个视图控制器 当该视图
    控制器转跳到另一个页面时 需要用[self.navigationController pushViewController:$新视图控制器 animated:YES];
    navigationController会绑定在每一个被托管的视图控制器中 所以可以直接调用

  • 导航控制器的底部工具栏

  • 底部工具栏默认是隐藏的 需要用手动显示开启出来self.navigationController.toolbarHidden = NO;

  • 注意:开启底部工具栏会使所有导航页面都显示底部导航栏 隐藏的话需要再设置为YES; 另外在退回导航页面时不会调用didload 所以以防不显示底部工具栏需要在事件中做好判断

  • 每个导航页面有一个toolbaritems 需要一个按钮数组

     //例子:
     self.navigationController.toolbarHidden = NO;
      UIBarButtonItem* bottomBar = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pressRight)];
     //    创建自动布局的占位按钮(不会显示出来 自动计算等分布局)
      UIBarButtonItem* spaceBar = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
      self.toolbarItems = @[spaceBar,bottomBar,spaceBar];
    

  • UIPickerView(选择器)
    • 需要实现两个代理类()
  • 需要设置对象的代理
 picker.delegate = self;
    picker.dataSource = self;
//还需要实现dataSource代理类的两个方法
//指定有几组选择组
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 3;
}
//指定每组有几行选择项
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
//此处可以根据component组号返回不同行数
    return 10;
}
//指定每项的名称 row和component都是从0开始
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [NSString stringWithFormat:@"%li行%li列",row+1,component+1];
}
//当选择框选择新的选择项时触发
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    NSLog(@"%li行%li列",row+1,component+1);
    //重新赋值选择框个数
    count = 2;
    //重新设置选择框代理个数据源代理 以刷新出新数据
    picker.delegate = self;
    picker.dataSource = self;
}

你可能感兴趣的:(UI高级组件)