Редактировать UIViewController

#iphone #cocoa-touch #uikit

#iPhone #cocoa-touch #uikit

Вопрос:

Кажется, я не могу найти никакой информации о том, что должно быть простой проблемой. У меня есть таблица, которая содержит ряд ячеек. При нажатии на ячейку отображается подробная информация об этом объекте. Я знаю, что возможно иметь кнопку, которая помещает все данные на экран в режиме редактирования. Какие-либо руководства или советы о том, как это сделать (правильно / с использованием лучших практик)?

Просто для ясности, это для iPhone / Objective-C / Cocoa.

Спасибо,

РЕДАКТИРОВАТЬ 1

Извините. Я знаю, как поместить туда кнопку. Но как сделать метки доступными для редактирования?

Ответ №1:

Вы путаете два состояния:

  1. Перевод TableView в режим редактирования — предназначен для удаления или перемещения ячеек в таблице, независимо от содержимого ячейки. Это контролируется свойством UITableView.editing. и

  2. Перевод tableViewCell в какое-то состояние редактирования. Для ячейки нет официального состояния редактирования (т. Е. нет единого флага, который нужно установить, чтобы превратить все UILabels в ячейке в редактируемые текстовые поля.) Вам нужно реализовать всю эту логику самостоятельно. Если вы используете .xibs, хорошей практикой здесь является использование другого .xib для режима редактирования вашей ячейки.

Ответ №2:

У вас не может быть редактируемых меток. Однако вы можете заменить метку текстовым полем при нажатии кнопки, а затем обновить метку после завершения.

Один из способов сделать это следующий. Создайте текстовое поле в том же месте, что и метка, и задайте его изначально textField.hidden = YES; . Затем реализуйте что-то в этом роде:

 -(IBAction)editMyCell:(id)sender {
  textField.text = cellLabel.text;
  cellLabel.hidden = YES;
  textField.hidden = NO;
  [textField becomeFirstResponder];
}
  

и когда редактирование завершится, восстановите с помощью

 -(void)textFieldDidEndEditing:(UITextField *)textField {
  cellLabel.text = textField.text;
  textField.hidden = YES;
  cellLabel.hidden = NO;
  [textField resignFirstResponder];
}
  

Вероятно, вы захотите немного изменить эту идею для вашей ситуации, но, вероятно, это самая простая в реализации вещь, которая позволяет достичь желаемого.

Комментарии:

1. Это кажется хорошим путем. Любое предложение о наилучшем способе сделать это 🙂

2. Вы можете создать текстовое поле того же размера и расположения, что и метка. Затем установите для него значение HIDDEN до редактирования, после чего вы установите для метки значение HIDDEN, затем вернитесь обратно. Просто не забудьте синхронизировать текст TF с текстом метки, когда начинается редактирование, и наоборот, когда оно заканчивается.

Ответ №3:

В базовом sdk нет ничего, связанного с редактированием UIViewController. Обычно такая логика определяется программистом. Но я мог видеть, что кто-то пишет функцию, которая превращает все ваши UILabels в вашем UIView в UITextViews, чтобы пользователь мог редактировать текст.

Там может быть пример кода, но мне кажется, что это пользовательский код.