2014-01-22 6 views
0

Я пытаюсь создать форму с помощью статического UiTableViewController - я хочу реализовать метод раскрытия IOS7 для отображения встроенного UIPickerView/UidateView, но его оказалось проблематичным из-за того, что таблица статична а не динамическим.IOS - Static UITableViewCell - Return Текущая высота

Во всяком случае - я последовал за решение, Аарон Bratcher в этом вопросе - iOS 7 - How to display a date picker in place in a table view? -

Похоже, что это будет соответствовать отлично - моя единственная проблема в том, что мои ячейки таблицы имеют разную высоту - так что мне нужно, чтобы вернуться либо высоту 200, либо ноль для строки выбора даты - но для всего остального они должны поддерживать свою текущую высоту - я не уверен, что лучший способ закодировать это - мне нужно ссылаться на текущую ячейку и в основном сказать, оставайтесь, как вы разве только ваш pickerRow?

Это то, что Ive получил до сих пор -

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == 5 && indexPath.row == 1) { // this is my picker cell 
     if (_editingStartTime) { 
      return 220; 
     } else { 
      return 0; 
     } 
    } else { 

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

     //return THE CURRENT CELLS HEIGHT 
    } 
} 

Не уверен, как я бы доступ высоту ячейки выше - или даже того, что логика будет делать то, что я хочу, чтобы это сделать в heightForRowAtIndexPath? есть идеи?

Приветствия

ответ

1

В статическом tableView вы можете запросить супер для высоты ячейки, как она существует в раскадровке.

.: например

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    /* ... */ 
    else { 
     CGFloat height = [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
     return height; 
    } 
} 

То же самое верно и для других методов DataSource, так что вы, вероятно, можете удалить код из - tableView:numberOfRowsInSection:, а также.

+0

совершенный - приветствия @ Маттиас Бауч – Dancer

0

Попробуйте

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
if (indexPath.section == 5 && indexPath.row == 1) { // this is my picker cell 
    if (_editingStartTime) { 
     return 220; 
    } else { 
     return 0; 
    } 
} else { 
    return self.tableView.rowHeight; 
} 

}

+0

cheers @revolver - я попробовал это - он возвращает ту же высоту для всех строк - что не так, как мне нужно, поскольку все высоты ячеек отличаются от – Dancer

+0

, где вы указываете высоту ячеек? если вы хотите вернуть разную высоту в ячейку, вы должны иметь возможность вычислять и возвращать их на основе indexPath? – revolver

+1

Например, 'if (indexPath.section == 0 && indexPath.row == 1) return 55' даст вам высоту 55 для ячейки в строке 0 раздел 1 – revolver

0

UITableViewCell класс является подклассом UIView, поэтому в основном вид, который имеет свою собственную структуру. Если вы сообщите вид ячейку таблицы, чтобы остаться, как это, вы должны получить доступ к его свойству кадра:

return cell.frame.size.height; 

Но если вы хотите эту конкретную ячейку, чтобы иметь такую ​​же высоту, как и другие клетки имеют, вы должны

return tableView.rowHeight; 

как револьвер сказал. Возможно, вы установили свойство rowHeight в Interface Builder или можете явно указать его в своем коде.

Смежные вопросы