#iphone #objective-c #uitableview
#iPhone #objective-c #uitableview
Вопрос:
Как бы я создал UITableView
аналогичное добавлению контакта или добавлению событий в модальном представлении?
Я знаю, как создать свой модальный вид и поместить в него UITableView
, но как бы я создал сгруппированные редактируемые ячейки, кнопку добавить фотографию и т.д. в течение UITableView
?
Я предполагаю, что то, что находится в модальном представлении добавления контакта, действительно является UITableView
, если нет, то как бы я все равно воссоздал это с помощью своих пользовательских полей для ввода?
Спасибо.
Комментарии:
1. Я также столкнулся с некоторыми трудностями в этом, лучше использовать компоненты пользовательского интерфейса, такие как UITextField, UIImageView, Ui Label .. разместите их в соответствии с вашими потребностями. Это будет слишком просто..
Ответ №1:
В режиме добавления контакта в табличном представлении есть настраиваемая ячейка с фоновым изображением, а для редактируемого режима есть текстовые поля. Итак, что я пытаюсь сказать, что вы можете создавать пользовательские ячейки в таблице с текстовыми полями и кнопками.
Комментарии:
1. Да, я знаю это, но всякий раз, когда я делал это в прошлом, это было много итераций одной пользовательской ячейки. В таблицах Добавить контакт или Добавить событие ячейки сильно отличаются. Как бы я реализовал это программно?
2. Вы можете проверить indexPath.row в cellForRowAtIndexPath и создать другую ячейку в соответствии с ней.
3. Да, я думал об этом, я попробую. Спасибо
4. Хорошо, итак, я сделал то, что вы пытались. Я понял, что то, что я пытаюсь создать, имеет только статический контент. Таким образом, я должен иметь возможность просто проверить indexPath.row и вернуть ячейку для этой строки. Просто. За исключением времени выполнения, у приложения возникают проблемы с поиском ячейки для возврата. Я объявил ячейку (UITableViewCell) в @interface, написал для нее свойство @ и @синтезировал его. Но когда я пытаюсь вернуть его в cellForRowAtIndexPath: , консоль выдает эту ошибку: UITableView DataSource должен вернуть ячейку из TableView:cellForRowAtIndexPath: что предполагает, что он просто не может найти ячейку для возврата. Есть идеи?
5. в cellForRowAtIndexPath: возвращает ли этот оператор ячейку;
Ответ №2:
Я думаю, что табличное представление — не лучший способ добиться этого. Хотя это выглядит как сгруппированное табличное представление, добавление в контакты сильно настроено.
Одним из главных преимуществ табличного представления является динамический размер. Для просмотра контактов это в основном исправлено.
Мой совет — создайте контроллер просмотра и добавьте изображения, текстовые представления и надписи.
Комментарии:
1. Я бы сделал это, но я планировал, что некоторые из моих пользовательских ячеек будут иметь индикаторы раскрытия, которые при нажатии будут помещать представление в навигационный стек. Я полагаю, я мог бы сделать это с помощью обычной кнопки, но это выглядело бы так же естественно, как и с ячейкой раскрытия.
Ответ №3:
Я, наконец, понял, как это сделать с помощью saadnib. Спасибо!
Я создал пользовательские UITableViewCells в том же xib, что и TableView, и назначил их как IBOutlets в classes @interface.
Затем в TableView:cellForRowAtIndexPath: я просто проверил строку и вернул правильную ячейку в том порядке, в котором я их хотел, поскольку то, что я пытался сделать, требовало только статических ячеек таблицы.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
return cell0;
}
if (indexPath.row == 1) {
return cell1;
}
if (indexPath.row == 2) {
return cell2;
}
return cell0;
}
Я пытался сделать это бесчисленное количество раз раньше, но это не сработало, это было потому, что ячейки, которые я пытался вернуть, были нулевыми, потому что класс не знал, где они находятся, потому что они не были загружены в память из файла nib. Таким образом, добавление этой строки кода в viewDidLoad: было необходимо.
[[NSBundle mainBundle] loadNibNamed:@"MyNibFile" owner:self options:nil];
Кажется, теперь все работает нормально, спасибо за вашу помощь.