一、使用UISegmentedControl實現選項卡功能
UISegmentedControl是iOS開發中十分常用的控件之一,特別是用於實現選項卡功能時非常方便。具體實現方式如下:
NSArray *items = @[@"選項1", @"選項2", @"選項3"];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:items];
segmentedControl.frame = CGRectMake(20, 100, self.view.frame.size.width-40, 30);
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget:self action:@selector(segmentedControlDidChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:segmentedControl];
上述代碼首先創建一個數組,用於存放選項卡的標題;然後使用這個數組初始化UISegmentedControl控件;接着設置選項卡控件的frame和默認選中的選項卡。最後添加響應方法,在選項卡發生變化時觸發。
在響應方法中,我們可以根據不同的選項卡切換對應的內容。例如:
- (void)segmentedControlDidChanged:(UISegmentedControl *)segmentedControl {
NSInteger index = segmentedControl.selectedSegmentIndex;
switch (index) {
case 0:
// 切換到選項卡1的內容
break;
case 1:
// 切換到選項卡2的內容
break;
case 2:
// 切換到選項卡3的內容
break;
}
}
二、設置UISegmentedControl的外觀
UISegmentedControl可以通過設置其屬性來改變外觀,例如設置背景色、字體、分段線等。
segmentedControl.backgroundColor = [UIColor whiteColor]; // 設置背景色
segmentedControl.tintColor = [UIColor redColor]; // 設置選中項的顏色
NSDictionary *normalAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:14], NSForegroundColorAttributeName:[UIColor grayColor]};
[segmentedControl setTitleTextAttributes:normalAttributes forState:UIControlStateNormal]; // 設置未選中項的字體顏色和字號
NSDictionary *selectedAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:14], NSForegroundColorAttributeName:[UIColor whiteColor]};
[segmentedControl setTitleTextAttributes:selectedAttributes forState:UIControlStateSelected]; // 設置選中項的字體顏色和字號
segmentedControl.apportionsSegmentWidthsByContent = YES; // 設置分段線自適應寬度
上述代碼分別設置了背景色、選中項的顏色、未選中項的字體、選中項的字體、分段線自適應寬度等屬性。通過這些屬性的設置,可以使得UISegmentedControl控件的外觀更加符合設計要求。
三、設置UISegmentedControl的使用限制
在使用UISegmentedControl時,有一些限制需要注意,例如控件的寬度、選項卡的數量等。
首先,UISegmentedControl控件的寬度需要足夠容納所有選項卡,否則會導致選項卡顯示異常。其次,控件的尺寸不支持Auto Layout,如果需要做Auto Layout處理,可以使用代碼動態計算寬度的方式。
[segmentedControl sizeToFit];// 計算需要的控件寬度
CGRect frame = segmentedControl.frame;
frame.size.width = [items.firstObject sizeWithAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]}].width * items.count + 20 * (items.count - 1);
segmentedControl.frame = frame;
上述代碼動態計算了選項卡寬度,並且設置分段線的間距為20,最終得到了正確的控件尺寸。
此外,由於選項卡過多會影響用戶體驗,因此推薦在一個控件中最多放置5個選項卡。
四、使用UISegmentedControl+UITableView實現篩選功能
UISegmentedControl還可以與UITableView控件一起使用,實現類似於篩選功能的效果。具體實現方式如下:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *items = @[@"全部", @"未審核", @"已審核"];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:items];
self.segmentedControl.selectedSegmentIndex = 0;
[self.segmentedControl addTarget:self action:@selector(segmentedControlDidChanged:) forControlEvents:UIControlEventValueChanged];
self.navigationItem.titleView = self.segmentedControl;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.dataSource.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// 根據選項卡選中的值,過濾顯示數據
NSInteger index = self.segmentedControl.selectedSegmentIndex;
if (index == 1) {
// 只顯示未審核的數據
MyDataModel *model = self.dataSource[indexPath.row];
if (model.status != 0) {
return nil;
}
} else if (index == 2) {
// 只顯示已審核的數據
MyDataModel *model = self.dataSource[indexPath.row];
if (model.status != 1) {
return nil;
}
}
// 顯示所有數據
MyDataModel *model = self.dataSource[indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = model.title;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44;
}
- (void)segmentedControlDidChanged:(UISegmentedControl *)segmentedControl {
[self.tableView reloadData];
}
上述代碼中,我們首先在ViewController的viewDidLoad方法中創建UISegmentedControl控件,並在tableView的headerView中顯示;然後實現tableView的數據源方法和代理方法,根據選項卡選中的值過濾顯示數據。最後,在響應方法中調用tableView的reloadData方法,實現數據刷新。
五、總結
本文詳細解析了UISegmentedControl的使用方式和設置外觀,還演示了兩種常用的使用方式:實現選項卡和實現篩選功能。UISegmentedControl作為iOS開發中常見的控件之一,掌握其使用方法和限制非常重要。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/205883.html