У меня есть пользовательский UITableViewCell, в котором UISegmentedControl добавлен как подпредставление через свойство contentView ячейки следующим образом:
#define TABLECELL_SEGMENT_TAG 1
...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UISegmentedControl *testSegmentedControl;
// Check for a reusable cell first, use that if it exists
UITableViewCell *tableCell = [tableView dequeueReusableCellWithIdentifier:@"OurCustomCell"];
// If there is no reusable cell of this type, create a new one
if (!tableCell) {
tableCell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"OurCustomCell"] autorelease];
// Create our segmented control
NSArray *segmentItems = [NSArray arrayWithObjects:@"Option 1", @"Option 2", nil];
UISegmentedControl *testSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentItems];
[testSegmentedControl setTag:TABLECELL_SEGMENT_TAG];
[[tableCell contentView] addSubview:testSegmentedControl];
[testSegmentedControl release];
}
// Set the selected segment status as required
testSegmentedControl = (UISegmentedControl *)[tableCell.contentView viewWithTag:TABLECELL_SEGMENT_TAG];
...
[testSegmentedControl addTarget:self
action:@selector(segmentedControlUpdated:)
forControlEvents:UIControlEventValueChanged];
return tableCell;
}
Что мне нужно сделать, так это несколько установить селектор addTarget
для каждого сегментированного элемента управления так, чтобы он идентифицировал рассматриваемую строку, очевидным решением является использование тега сегментированного элемента управления. Однако, как вы можете видеть, я уже использую тег для извлечения элемента управления из пользовательского содержимого contentView, если существующая ячейка возвращается с помощью метода dequeueReusableCellWithIdentifier:
UITableView.
Как таковой, мне просто интересно, как лучше всего добиться этого? (Полагаю, я мог бы просто расширить класс UISegmentedControl для добавления свойства associatedTableRow
, но мне интересно, есть ли более элегантное решение.)