iOS Dev 深入浅出 导航控制器(二)with表视图相关操作

本文通过实例介绍如何在iOS应用中实现表视图控制器的单选功能及自定义单元格扩展图标,涵盖导航控制器的使用及二级视图的添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天的内容是在上一篇文章(<<iOS Dev 深入浅出 导航控制器(一)>>)的程序上,进行进一步操作,主要是为上一个程序添加更多的功能,来描述表视图控制器,导航控制器和表视图控制器是我们iOS应用中最常用的两个控制器,今天的内容呢,是围绕表视图控制器的相关操作进行撰写,因为我们已经了解导航控制器的操作了.我们现在为这个程序添加更多的二级视图.

首先一个SecondSingleMarkViewController(.h,.m),它同样继承于我们的统一二级管理控制器MySecondViewController,这个的主要功能是,实现TableView内的单选操作,我们会看到选择行后面会有一个"对号".首先,我们将SecondSingleMarkViewController导入MyBaseViewController和MySecondViewController,并在MyBaseViewController中像添加FirstShowMoreViewController一样添加它:

SecondSingleMarkViewController *secondSingleMarkViewController = [[SecondSingleMarkViewController alloc] initWithStyle:UITableViewStylePlain];
    secondSingleMarkViewController.title = @"SingleMark";
    secondSingleMarkViewController.ImageForRow = [UIImage imageNamed:@"checkmarkControllerIcon.png"];
    [arrayforcontrollers addObject:secondSingleMarkViewController];


        这样之后我们就可以专心的去写SecondSingleMarkViewController了,同样的添加显示数据,同样的让它显示出来,倒是这次们要添加这个对号扩展图标,所以我们在-(UITableViewCell *)tableView: cellForRowAtIndexPath:方法中添加上:

cell.accessoryType = ([lastindexpath row] == [indexPath row]&&lastindexpath !=nil)?UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;

这里我们在h文件里面,声明了一个NSIndexPath *lastindexpath,它主要用来记录最后选择的行,如果没有它,那么在页面内滑动,会看到"对号位置不准确",之后开始添加方法-(void)tableView:didSelectRowAtIndexPath:来完成单选操作,

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSInteger newRow = [indexPath row];
    NSInteger lastRow = (lastindexpath != nil)?[lastindexpath row]:-1;
    if (newRow != lastRow) {
        UITableViewCell *newcell = [tableView cellForRowAtIndexPath:indexPath];
        newcell.accessoryType = UITableViewCellAccessoryCheckmark;
        UITableViewCell *lastcell = [tableView cellForRowAtIndexPath:lastindexpath];
        lastcell.accessoryType = UITableViewCellAccessoryNone;
        self.lastindexpath = indexPath;
    }
    //取消选择,既使选择行不高亮
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
这样,我们的 SecondSingleMarkViewController就完成了,运行起来如图:



现在我们再添加一个二级视图控制器ThirdCostomAccessoryViewController(.h,.m)同样继承我们的统一二级管理控制器MySecondViewController,这个的主要功能是,实现自定义Cell的Accessory Icon.首先,我们将ThirdCostomAccessoryViewController导入MyBaseViewController和MySecondViewController,并在MyBaseViewController中像添加FirstShowMoreViewController一样添加它:

ThirdCostomAccessoryViewController *thirdCostomAccessoryViewController = [[ThirdCostomAccessoryViewController alloc] initWithStyle:UITableViewStylePlain];
    thirdCostomAccessoryViewController.title = @"CostomAccessory";
    thirdCostomAccessoryViewController.ImageForRow =[UIImage imageNamed:@"rowControlsIcon.png"];
    [arrayforcontrollers addObject:thirdCostomAccessoryViewController];

      之后的工作就是编辑ThirdCostomAccessoryViewController,又是同样的创建数据,和显示列表,在选择行时候触发动作,显示一个UIAlertView对象,并[alertview show]这都很简单,下面我们开始写这个自定义的扩展图标:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *pathindex = @"pathindex";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:pathindex];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:pathindex];
        //初始化Button
        UIImage *imageup = [UIImage imageNamed:@"button_up.png"];
        UIImage *imagedown = [UIImage imageNamed:@"button_down.png"];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0.0, 0.0, imageup.size.width, imageup.size.height);
        [button setTitle:@"But" forState:UIControlStateNormal];
        [button setBackgroundImage:imageup forState:UIControlStateNormal];
        [button setBackgroundImage:imagedown forState:UIControlStateHighlighted];
        [button addTarget:self action:@selector(ButtonCilcked:) forControlEvents:UIControlEventTouchUpInside];
        //这里的方法用来自定义扩展图标,而accessoryType是用来调用系统定义的4中样式
        cell.accessoryView = button;
    }
    cell.textLabel.text = [arraylist objectAtIndex:[indexPath row] ];
    //这里我们给每个button一个标签,一便我们在之后调用的时候找到它,这里是一个小技巧
    UIButton *button = (UIButton *)cell.accessoryView;
    button.tag = [indexPath row];
    
    return cell;
}
再来写一下按键事件ButtonCilcked:方法

-(IBAction)ButtonCilcked:(id)sender{
    UIButton *button = sender;
    NSString *buttonTitle = [arraylist objectAtIndex:button.tag];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You choose:" message:buttonTitle delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
这样我们就完成了工作,

        

这样我们这个程序就有了三个功能,功能还有,我会继续写下去

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值