Hier wird Der Code, der das Protokoll verwendet. In diesem Beispiel können Sie die Wertänderung des Segments Control beobachten. Sie können wissen, welches Segment der Zelle angezapft wird und wissen, dass sich die Segmentdaten ändern.
// ViewController.m
#import "ViewController.h"
#import "segmentTestCell.h"
@interface ViewController()<UITableViewDataSource, UITableViewDelegate, segmentTestCellDelegate>
@property (nonatomic, strong) UITableView *table;
@end
@implementation ViewController
#pragma mark - LifeCycle
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.table registerClass:[segmentTestCell class] forCellReuseIdentifier:@"cellId"];
[self.view addSubview:self.table];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITableViewDataSource, UITabBarDelegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 100;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 50;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
segmentTestCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId"];
cell.indexPath = indexPath;
if (!cell.delegate) {
cell.delegate = self;
}
return cell;
}
#pragma mark - segmentTestCellDelegate
- (void)segmentChangeAtIndexPath:(NSIndexPath *)indexPath SelectIndex:(NSInteger)selectedIndex SelectTitle:(NSString *)selectedTitle {
NSLog(@"%lu - %lu - %@",indexPath.section,indexPath.row,selectedTitle);
// do something by yourself
}
#pragma mark - Getter
- (UITableView *)table {
if (!_table) {
_table = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
_table.allowsSelection = NO;
_table.dataSource = self;
_table.delegate = self;
}
return _table;
}
@end
// segmentTestCell.h
#import <UIKit/UIKit.h>
@protocol segmentTestCellDelegate <NSObject>
@optional
- (void)segmentChangeAtIndexPath: (NSIndexPath *)indexPath SelectIndex: (NSInteger)selectedIndex SelectTitle: (NSString *)selectedTitle;
@end
@interface segmentTestCell : UITableViewCell
@property (nonatomic, strong) UISegmentedControl *segmentControl;
@property (nonatomic, strong) NSIndexPath *indexPath;
@property (nonatomic, weak) id<segmentTestCellDelegate> delegate;
@end
// segmentTestCell.m
#import "segmentTestCell.h"
#define titles @[@"A",@"B",@"C"]
@interface segmentTestCell()
@end
@implementation segmentTestCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.segmentControl.frame = CGRectMake(20, 10, 100, 30);
[self.contentView addSubview:self.segmentControl];
}
return self;
}
- (void)segmentValueChange: (id)sender {
// do something
UISegmentedControl *control = (UISegmentedControl *)sender;
if ([self.delegate respondsToSelector:@selector(segmentChangeAtIndexPath:SelectIndex:SelectTitle:)]) {
[self.delegate segmentChangeAtIndexPath:_indexPath SelectIndex:control.selectedSegmentIndex SelectTitle:titles[control.selectedSegmentIndex]];
}
}
- (UISegmentedControl *)segmentControl {
if (!_segmentControl) {
_segmentControl = [[UISegmentedControl alloc]initWithItems:titles];
[_segmentControl addTarget:self action:@selector(segmentValueChange:) forControlEvents:UIControlEventValueChanged];
}
return _segmentControl;
}
@end
Bitte definieren Wertänderungen in UITableViewController. Anzahl der Zeilen wird sich ändern? – KlimczakM
Meinst du Änderungen in irgendeiner Zelle? – KlimczakM