UITableViewController не выполняет автоматическую прокрутку с помощью клавиатуры, когда владелец TableView помещается в подпредставление UIViewController - PullRequest
2 голосов
/ 02 марта 2012

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

Вот что у меня есть:

  1. Обычная UIViewController обработка UIView ( MyView.xib ) (это также корневой вид)
  2. Обычная UITableViewController обработка UITableView в отдельном XIB файле (MyTable.xib)
  3. Обычный UITableViewCell был перетащен в (MyTable.xib) и расположен рядом с UITableView. У этого UITableViewCell нет собственного класса. Также есть розетка, подключенная к UITableViewController классу.
  4. Обычный UITextField сидит под UITableViewCell
  5. Я связал личность владельца файла в MyTable.xib с UITableViewController классом
  6. Я подключил делегат и источник данных UITableView к владельцу файла

Так выглядит в IB в MyTable.xib

  • UITableView
  • UITableViewCell
    • UITextField

Поэтому, когда я генерирую строки таблицы в UITableViewController, первые пять строк помещаются в очередь как обычные ячейки, а для последней строки я возвращаю свой вывод myCell (UITableViewCell). Это тот, который имеет UITextField.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    if (indexPath.row == 5) return myCell;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"Test"];

    return cell;
}

Наконец, в моих ViewController viewDidLoad я создаю экземпляр UITableViewController и отображаю его. Он успешно показывает 5 строк и мой пользовательский внизу. Все в основном виде, но ...

- (void)viewDidLoad
{
[super viewDidLoad];

mtc = [[MortgageTableController alloc] initWithNibName:@"MyTable" bundle:nil];
mtc.view.frame = CGRectMake(0, 44, 320, 375);
[self.view addSubview:mtc.view];
}

Проблема, с которой я столкнулся, заключается в том, что, если я нажму на UITextField, я не увижу, как автоматически прокручивается таблица. Я думал, что это было одним из преимуществ использования UITableViewController, или, может быть, я здесь что-то не так делаю.

Я также попытался выбрать и / или прокрутить таблицу до строки, но безуспешно.

Ответы [ 3 ]

12 голосов
/ 28 ноября 2013

Вам нужно вызвать super viewWillAppear, чтобы автоматически выполнить прокрутку.

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // your code
}

РЕДАКТИРОВАТЬ: 19 июля, предварительное условие для этого - ваш контроллер является подклассом UITableViewController

1 голос
/ 02 марта 2012

Когда вы встраиваете tableView в superView, вы не получаете типичное поведение контроллера табличного представления.Что происходит с контроллером представления тальб, когда он управляет полноэкранным табличным представлением (например, выдвигается на контроллере навигации), так это то, что размер представления таблицы изменяется при появлении клавиатуры., вы должны выполнить работу: добавьте свой контроллер представления или контроллер представления таблицы в качестве наблюдателя уведомлений клавиатуры и прокрутите представление таблицы в нужное вам положение.

0 голосов
/ 02 марта 2013

Я столкнулся с подобной проблемой, но я использовал tableviewcontroller, поэтому я должен был получить поведение смещения tableview бесплатно.Проблема оказалась в том, что я звонил [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardDidShowNotification object:nil];.Я считаю, что это привело к тому, что tableviewcontroller не получил это уведомление (я думаю, что объект может зарегистрировать только 1 метод на уведомление).Изменение вышеуказанного значения на [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardWillShowNotification object:nil]; решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...