Проблема здесь в том, что таблицы предназначены для простого и точного отображения содержимого вашей модели данных, и вы решили, что не хотите этого делать. Вы боретесь с API.
Прямой способ сделать это - поставить отметку в numberOfRowsInSection
так, чтобы она добавляла единицу к числу строк, когда вы хотите отобразить строку ввода. Затем в cellForRowAtIndexPath:
вам нужно будет проверить, запрашивает ли табличное представление строку ввода, и вернуть соответствующий тип ячейки.
С точки зрения дизайна пользовательского интерфейса вы можете решить, является ли эта установка лучшей. Это не стандартная установка. Будет ли пользователь понимать, что он может редактировать только последний ряд таблицы? Они поймут, что не могут редактировать другие строки? Что-нибудь в интерфейсе говорит им, как все это работает? Должен ли пользователь прокручивать до конца таблицы каждый раз, когда он хочет добавить данные? Как долго может расти этот стол? Как отображение клавиатуры для последнего ряда таблицы влияет на прокрутку таблицы?
Я думаю, что было бы лучше использовать нижний колонтитул для отображения текстового поля, которое визуально отличается от остальной части таблицы. Это было бы программно проще. Вам не нужно проверять, запрашивает ли таблица последний ряд каждый раз, когда запрашивает ячейку.
Edit:
Думая об этом, возможно, секционированный стол будет проще. Просто поместите специальную строку в ее собственный раздел (с заголовком или без него). Это упростит вам обработку строк, которые поступают из словаря, поскольку счетчик строк в этом разделе всегда будет счетчиком словаря. Аналогично, вы можете просто проверить атрибут section в indexpath, чтобы узнать, какую ячейку вернуть для какой строки.