Я чувствую, что подведу вас к предыдущему вопросу, поэтому здесь нужно кое-что приложить немного больше усилий
Вы можете попробовать что-то вроде следующего. Это только примерный проект, чтобы дать вам общее представление, но он работает довольно хорошо.
Я создал пустой проект с одним контроллером табличного представления. У этого было жестко закодированное количество секций (1) и рядов (10). У меня была одна прототипная ячейка типа Basic
. Вы можете установить любой вид, который вам нравится, как вспомогательный вид, поэтому я использовал текстовое поле. Поэтому вся магия происходит в cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (!cell.accessoryView)
{
UITextField *accessory = [[UITextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 30.0)];
accessory.borderStyle = UITextBorderStyleLine; // Just so you can see the effect
cell.accessoryView = accessory;
}
NSMutableString *text = [NSMutableString stringWithFormat:@"A"];
for (int i = 0; i < indexPath.row; i++) {
[text appendFormat:@"A"]; // Just to illustrate different sizes
}
cell.textLabel.text = text;
CGSize labelSize = [cell.textLabel.text sizeWithFont:cell.textLabel.font];
CGRect accessoryFrame = cell.accessoryView.frame;
accessoryFrame.size.width = cell.bounds.size.width - labelSize.width - 40;
// 40 is a magic number to prevent overlaps, you could be cleverer here
// You'd also want to restrict to some minimum width.
cell.accessoryView.frame = accessoryFrame;
return cell;
}
Ключевые моменты:
- Вам нужно всего лишь изменить размеры вспомогательного вида.
- Текстовое поле довольно простое - обычно вам нужен небольшой фабричный метод, который возвращает один для вас, установка делегата и, возможно, панель инструментов в качестве вспомогательного представления с кнопками «предыдущий», «следующий» и «выполненный»
- Присвоение значения, введенного в текстовое поле, обратно модели данных - это упражнение, оставленное читателю.
Создает следующий вывод: