2015-12-27 2 views
0

Я хочу достичь одной fucntionality, в которой мне нужно свернуть и расширить некоторые виды в uitableview.Складной UITableView с разделом

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

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

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

Пожалуйста, дайте мне знать правильное решение или пример, чтобы достичь этого.

enter image description here

ответ

0

Так что, если я правильно понимаю, что вы предпочли бы иметь tableViewCells где части tableviewcell могут быть расширены после некоторых действий пользователя (возможно после нажатия на одну из кнопок в одной и той же клетке)? Тогда то, что вы могли бы рассмотреть, чтобы иметь в камере просмотра таблицы метод, как этот

- (IBAction)action:(id)sender { 
[_delegate actionPressed:relevantData]; 

} 

, где действие подключено к кнопке наших правил. то в вашей tableviewcontroller реализовать этот метод

-(void)actionPressed:(id)relevantData 
{ 
//update your datasource, for example retrieve the text you want in your expanded views 
[self.tableView reloadData]; 
} 

В методе

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
//normal things about reusing cells etc. 
[cell configureWithData:(id)Data]; 

return cell; 
} 

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

Убедитесь, что с учетом этого в

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
//return correct cell height depending on which views in cell were expanded or not 

} 

или вы можете подключить вашу ячейку с autolayout и использовать что-то подобное в viewdidload

self.tableView.estimatedRowHeight=100.0; 
self.tableView.rowHeight=UITableViewAutomaticDimension; 
0

Вы можете держать его так, как вы сделали выпадающие ячейки и использовать представление заголовка таблицы (не заголовок раздела), который будет помещен в начало всей таблицы. Вы можете перетащить UIView в верхней части Tableview в раскадровке или программно в viewDidLoad:

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; 
[headerView addSubview:imageView]; 
UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)]; 
[headerView addSubview:labelView]; 
self.tableView.tableHeaderView = headerView; 

Это будет выглядеть примерно так (это для представления коллекции, хотя и таким образом клетки, очевидно, будет полная ширина). Существует глобальный заголовок, а затем ваши заголовки разделов, а затем ваши клетки:

enter image description here

0

Я решил тот же тип проблемы несколько недель назад, Вы можете попробовать это -

сначала пользовательские ячейки и использовать авто макет, такой, что ячейка является самостоятельной калибровкой i.е определяет его размер в соответствии с его содержанием, вы можете воспользоваться помощью этой ссылки http://useyourloaf.com/blog/self-sizing-table-view-cells.html

(Добавление этих ограничений было бы легче, если вы будете добавлять в коде)

Основная идея заключается в том, чтобы добавить ограничения для расширенного состояния и сокращенное состояние и хранить их в массиве.

Расширенное состояние - нормальное состояние, как показано на рисунке. Добавьте необходимые ограничения и хранить их в массиве сказать constraintsForExpansionOfView

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

constraint.active = false 

хранить Также эти ограничения в отдельном массиве сказать constraintsForContractionOfView

Таким образом, первоначально ваш constraintsForExpansion будет применяться, как мы havn't деактивируется их при добавлении.

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

 for constraint in constraintsForContractionOfView { 

      constraint.active = true 
     } 


     for constraint in constraintsForExpansionOfView { 

      constraint.active = false 
     } 

Под анимационного блоком также изменить альфа взглядов, которые вы хотите заключить контракт на 0, как

someview.alpha = 0 

и в то время как снова Расширяя ваш взгляд просто делать противоположное в анимации блока т.е. теперь активировать ваш constraintsForExpansionOfView и деактивировать constraintsForCo ntractionOfView и изменить альфа всех скрытых просмотров на 1.

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

  • Нет связанных вопросов^_^