当前位置 : 主页 > 手机开发 > ios >

ios – 如何使UIButton仅出现在最后一个单元格中?

来源:互联网 收集:自由互联 发布时间:2021-06-11
我对Objective C编程很新,并且有一个带有自定义单元格的UITableView设置.我想这样做,以便用户可以触摸将添加另一个单元格的按钮,此按钮将仅显示在最后一个单元格中.目前,它没有出现.这
我对Objective C编程很新,并且有一个带有自定义单元格的UITableView设置.我想这样做,以便用户可以触摸将添加另一个单元格的按钮,此按钮将仅显示在最后一个单元格中.目前,它没有出现.这是我正在使用的代码.我在自定义单元格中创建了按钮,并使用“setHidden:YES”将其隐藏在单元格内.我正在尝试“setHidden:NO”使按钮出现在TableView代码中,但它无法正常工作.我想也许它与重新加载单元格有关,但我不确定我是否正朝着正确的方向前进.谢谢,我将不胜感激.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{workoutTableViewCell *cell = (workoutTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[cell.addButton setTitle:(NSString *)indexPath forState:UIControlStateApplication];
[cell.textLabel setText:[NSString stringWithFormat:@"Row %i in Section %i", [indexPath row], [indexPath section]]];

NSInteger sectionsAmount = [tableView numberOfSections];
NSInteger rowsAmount = [tableView numberOfRowsInSection:[indexPath section]];

if ([indexPath section] == sectionsAmount - 1 && [indexPath row] == rowsAmount - 1) {
    NSLog(@"Reached last cell");
    [cell.addButton setHidden:NO];
    if (lc == NO)
    {[[self tableView] reloadData];
        lc = YES;
    }
}

 return cell;
 }
以下UITableViewDataSource方法将帮助您返回部分中可用的确切行数.在这里,你需要返回额外的,因为你想拥有最后一个按钮.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return yourRowCount + 1;
}

现在在下面的方法中,您将使用indexpath.row检查行号

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *lastCellIdentifier = @"LastCellIdentifier";
    static NSString *workoutCellIdentifier = @"WorkoutCellIdentifier";

    if(indexPath.row==(yourRowCount+1)){ //This is last cell so create normal cell
        UITableViewCell *lastcell = [tableView dequeueReusableCellWithIdentifier:lastCellIdentifier];
        if(!lastcell){
            lastcell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:lastCellIdentifier];
            CGRect frame = CGRectMake(0,0,320,40);
            UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
            [aButton addTarget:self action:@selector(btnAddRowTapped:) forControlEvents:UIControlEventTouchUpInside];
            aButton.frame = frame;
            [lastcell addSubview:aButton];
        }
        return lastcell;
    } else { //This is normal cells so create your worktouttablecell
        workoutTableViewCell *cell = (workoutTableViewCell *)[tableView dequeueReusableCellWithIdentifier:workoutCellIdentifier];
        //Configure your cell

    }
}

或者你可以像编程一样创建UIView并将其设置为FooterView,如@student在评论代码中所建议的那样,

CGRect frame = CGRectMake(0,0,320,40);
UIView *footerView = [[UIView alloc] initWithFrame:frame];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton addTarget:self action:@selector(btnAddRowTapped:) forControlEvents:UIControlEventTouchUpInside];
aButton.frame = frame;
[footerView addSubView:aButton];
[yourTableNmae setTableFooterView:footerView];

声明方法如下

-(IBAction)btnAddRowTapped:(id)sender{
    NSLog(@"Your button tapped");
}
网友评论