1. 断言(Assertions)
- 断言检查对应预期结果的具体条件。如果条件不符合预期结果, Xcode会报错指出断言失败。例如,可以断言你的Developer 类响应“writeKillerApp: message”;如果它没有,断言失败,Xcode报错。
- 例如:判断是否是UIViewController 的字类
NSAssert([class isSubclassOfClass:[UIViewController class]], @"-----------%@ is not a kind of ViewController-----------",classname)
2. 分段控制器(UISegmentedControl)
- 作用:同一时刻只能选中一个标签
- 基本使用:创建、设置选中、将其放在Navigation标题上
//创建
UISegmentedControl *segmentControl = [[UISegmentedControl alloc] initWithItems:@[@"分组",@"全部"]];
//将其放在Navigation标题上
self.navigationItem.titleView = segmentControl; //分组器默认选中项segmentControl.selectedSegmentIndex = 0;
2.1 事件监听
- 监听 UISwitch 的状态改变,要使用 Value Changed 事件(可参照 UISlider 的使用)。
- 常用的监听事件:UIControlEventValueChanged,值改变事件
[segmentControl addTarget:self action:@selector(segmentControlChangeValue:) forControlEvents:UIControlEventValueChanged];
2.2 手势事件大全
- iOS官方了20中手势,可以用来监听。
typedef NS_OPTIONS(NSUInteger, UIControlEvents) { UIControlEventTouchDown = 1 << 0, // on all touch downs
UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns
(tap count > 1) UIControlEventTouchDragInside = 1 << 2,
UIControlEventTouchDragOutside = 1 << 3,
UIControlEventTouchDragEnter = 1 << 4,
UIControlEventTouchDragExit = 1 << 5,
UIControlEventTouchUpInside = 1 << 6,
UIControlEventTouchUpOutside = 1 << 7,
UIControlEventTouchCancel = 1 << 8,
UIControlEventValueChanged = 1 << 12, // sliders, etc.
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc.
UIControlEventEditingDidBegin = 1 << 16, // UITextField
UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
UIControlEventAllTouchEvents = 0x00000FFF, // for touch events
UIControlEventAllEditingEvents = 0x000F0000, // for UITextField
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF
};
UIControlEventTouchDown:
单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。UIControlEventTouchDownRepeat:
多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。UIControlEventTouchDragInside:
当触摸在控件窗口内拖动时。UIControlEventTouchDragOutside:
当触摸在控件窗口之外拖动时。UIControlEventTouchDragEnter:
当触摸从控件窗口之外拖动到内部时。UIControlEventTouchDragExit:
当触摸从控件窗口内部拖动到外部时。UIControlEventTouchUpInside:
所有在控件之内触摸抬起事件。UIControlEventTouchUpOutside:
所有在控件之外触摸抬起事件UIControlEventTouchCancel:
所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。UIControlEventValueChanged:
当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。UIControlEventEditingDidBegin:
当文本控件中开始编辑时发送通知。UIControlEventEditingChanged:
当文本控件中的文本被改变时发送通知。UIControlEventEditingDidEnd:
当文本控件中编辑结束时发送通知。UIControlEventEditingDidOnExit:
当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。UIControlEventAlltouchEvents:
通知所有触摸事件。UIControlEventAllEditingEvents:
通知所有关于文本编辑的事件。UIControlEventAllEvents:
通知所有事件。
2.3 设置segment的显示样式(segmentedControlStyle)
typedef NS_ENUM(NSInteger, UISegmentedControlStyle) { UISegmentedControlStylePlain, // large plain:系统默认平板样式
UISegmentedControlStyleBordered, // large bordered:大宽边,黑边
UISegmentedControlStyleBar, // small button/nav bar style. tintable:条状
样式 UISegmentedControlStyleBezeled, // DEPRECATED. Do not use this style.:不要用这个类型
} NS_DEPRECATED_IOS(2_0, 7_0, "The segmentedControlStyle property no longer has any effect") __TVOS_PROHIBITED;
2.4 UISegmentedControl的常见属性
属性名称 | 作用 |
---|---|
BOOL momentary | 点击之后是否恢复原样 |
numberOfSegments(只读) | 总选项数 |
selectedSegmentIndex | 用来设置或者获取选中项 |
2.5 设置分段控制器的宽度
- 因为分段控制器有很多段,方便起见,可以循环赋值。
// 批量设置分组指示器的宽度
for (NSInteger i = 0 ; i < segmentControl.numberOfSegments; i++) {
[segmentControl setWidth:80 forSegmentAtIndex:i];
}