Three20 TTSectionedDataSource высота строки - PullRequest
1 голос
/ 01 июня 2010

Я использую Three20 для создания таблицы с несколькими текстовыми полями для регистрации пользователей. Я нашел два возможных метода с использованием Three20. Первый использует метод tableDidLoadModel TTSectionedDataSource для ручного добавления компонентов пользовательского интерфейса, а второй добавляет пользовательские элементы, содержащие предварительно отформатированные компоненты пользовательского интерфейса. Второй вариант кажется более сложным, и мне трудно получить доступ к отдельным полям. Так что, если одно поле является текстовым полем для имени пользователя, мне нужно получить доступ к полю, чтобы отправить имя пользователя, и кажется, что нет простого ответа. Первый вариант дает мне большую гибкость, но я не могу понять, как установить отдельные высоты строк. Одна строка может иметь метку над текстовым полем, другая может иметь изображение и т. Д. Есть ли метод, который можно использовать в TTSectionedDataSource, который позволит мне установить высоту для каждой строки? До сих пор я использую метод один и создаю UIViews для хранения поля метки и текстового поля. Я пытался изменить фрейм uiview перед его добавлением в массив items, но это никак не отразилось.

Есть идеи?

1 Ответ

1 голос
/ 02 июня 2010

Полагаю, я понял это.Не уверен, что это правильное решение, но, похоже, оно работает.

Сначала в своем пользовательском классе элементов я передаю источник данных в качестве делегата.Теперь, когда делегат является частью элемента, я могу передать его в свое текстовое поле в качестве делегата.Пока я включаю UITextFieldDelegate в мой класс источника данных, он будет отвечать как делегат моего текстового поля.Таким образом, мы получаем содержимое из текстового поля.

Если я хочу изменить содержимое текстового поля из источника данных, я могу использовать метод:

- (void)tableView:(UITableView*)tableView cell:(UITableViewCell*)cell willAppearAtIndexPath:(NSIndexPath*)indexPath

Я могу проверить строку, используя indexPath.row затем введите ячейку в качестве соответствующего пользовательского класса ячейки.Оттуда я могу получить доступ к любым публичным методам в своем классе ячеек.Поэтому я создал один, который возвращает ссылку на текстовое поле.Поэтому я могу сказать:

[[(MyCustomTextFieldCell *)cell theTextField] setText:@"hello world"];

Следующий шаг - назначить его локальному ивару, и тогда я предполагаю, что я смогу получить к нему доступ в любое время.

Основная причинаЯ хочу иметь возможность изменять содержимое текстового поля, так как в некоторых случаях при нажатии на текстовое поле появляется средство выбора, а результаты средства выбора форматируются и вставляются обратно в текстовое поле.

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

спасибо, хау

...