Добавить раздел с анимацией в UITableView?
Я работаю в приложении для iPhone, используя UITableView для разработки своего приложения. у меня есть 3 раздела, и каждый раздел имеет 1 строку, когда пользователь нажимает UIButton в Section1, чтобы вызвать метод B1 для добавления еще одного раздела и строки в этом табличном представлении. работает нормально.
Я попытался добавить анимацию (для добавления еще один раздел и строку).
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
Но анимировать все строки и разделы, но я хочу добавить анимацию в разделе добавления и строки в то время. Как справиться с этим, пожалуйста, помогите мне?
Заранее спасибо
Я попробовал это:
- (void)viewDidLoad
{
[super viewDidLoad];
ExpandActive = NO;
self.title=@"Expand Tables";
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if(ExpandActive == YES)
{
return 4;
}
else
{
return 3;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 1;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
if(ExpandActive == YES)
{
if(section == 0)
{
return @"Header1";
}
else if(section == 1)
{
return @"Header1";
}
else if(section == 2)
{
return @"Header1";
}
else if(section == 3)
{
return @"Header1";
}
}
else
{
if(section == 0)
{
return @"Header1";
}
else if(section == 1)
{
return @"Header1";
}
else if(section == 2)
{
return @"Header1";
}
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.userInteractionEnabled=YES;
if(ExpandActive == YES)
{
if(indexPath.section == 0)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B1) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B2) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
else if(indexPath.section == 1)
{
text = [[UITextView alloc]initWithFrame:CGRectMake(0,0, 320, 50)];
text.text=@"sdadd";
[cell.contentView addSubview:text];
}
else if(indexPath.section == 2)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B5) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B6) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
else if(indexPath.section == 3)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B5) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B6) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
}
else
{
if(indexPath.section == 0)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B1) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B2) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
else if(indexPath.section == 1)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B3) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B4) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
else if(indexPath.section == 2)
{
UIView *bg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];
bg.backgroundColor = [UIColor clearColor];
bg.userInteractionEnabled = YES;
UIButton *btn =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"Yes" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 5, 120, 40);
[btn addTarget:self action:@selector(B5) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn];
UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn1 setTitle:@"No" forState:UIControlStateNormal];
btn1.frame = CGRectMake(180, 5, 120, 40);
[btn1 addTarget:self action:@selector(B6) forControlEvents:UIControlEventTouchUpInside];
[bg addSubview:btn1];
cell.backgroundView = bg;
[cell.contentView addSubview:bg];
}
}
return cell;
}
-(void)B1
{
NSLog(@"B1");
ExpandActive = YES;
[text removeFromSuperview];
[self.tableView reloadData];
}
-(void)B2
{
NSLog(@"B2");
ExpandActive = NO;
[self.tableView reloadData];
[text removeFromSuperview];
}
2 ответа
Похоже, что вы хотите добавить новый раздел как раздел 1. Обновите два метода кнопки, как это:
-(void)B1 {
NSLog(@"B1");
ExpandActive = YES;
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation: UITableViewRowAnimationFade];
}
-(void)B2 {
NSLog(@"B2");
ExpandActive = NO;
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation: UITableViewRowAnimationFade];
}
Не стесняйтесь использовать другую анимацию.
Кстати, у вас много повторяющихся кодов. Вам необходимо удалить весь дублирующий код.
Вот пример:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSInteger effectiveSection = section;
if (ExpandActive && effectiveSection > 1) {
effectiveSection++;
}
switch (effectiveSection) {
case 0:
return @"Fixed Section 1";
case 1:
return @"Optional Section";
case 2:
return @"Fixed Section 2";
case 3:
return @"Fixed Section 3";
}
return nil; // this shouldn't be reached but makes the compiler happy
}
Другое дело, не реализуйте heightForRowAtIndexPath
метод, если у вас есть фиксированная высота. Это очень неэффективно. Вместо этого установите rowHeight
Свойство на табличном представлении. Хорошее место для этого в viewDidLoad
, Просто установите его один раз, и все готово.
Еще один - нет необходимости устанавливать userInteractionEnabled
на ячейку таблицы или представление. Он включен по умолчанию. Это отключено для таких вещей, как UILabel
а также UIImageView
,
Использование – insertSections:withRowAnimation:
метод UITableView. Вы также должны обработать количество разделов, возвращаемых в -numberOfSectionsInTableView:
метод.