加UITableView 到自定义的UIViewController的操作

在自定义的视图控制器类中,通过代码添加uitableview对象和mkmapview对象,实现两个视图对象的展现切换。tableview的delegate和datasource也在这个自定义的视图控制器类中实现。这样就不用依赖于XCODE提供的uitableviewcontroller类。这样更加灵活,有利于开发出更强大的应用。
根据展现顺序,使用多线程加载后一个mkmapview对象,企图实现更友好的展现效果。我设想的,开始只需要显示一个tableview,而mapview是在后台不用立即显示出来。另外,如果加载到tableview的数据是来自网络,而不是测试中本地,那么也可以用多线程来实现。
我列举了两种多线程的使用方法,一种是NSOperationQueue,另一种是dispatch_async。两种方法孰优孰劣,我也不知道。对此有研究的网友请指点一二。

下面给出源码,如下所示:

#import <UIKit/UIKit.h>
@interface XYViewController : <UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UIBarButtonItem *switchMapAndList;
- (IBAction)switchListOrMap:(id)sender;

@end

#import "XYViewController.h"
#import "XYTableView.h"
#import <MapKit/MapKit.h>
@interface XYViewController ()
{
    XYTableView *resultList;
    NSMutableArray *dataArray1;
    NSMutableArray *dataArray2;
    NSMutableArray *titleArray;    
    UIImageView *resultImg;    
    MKMapView *resultMap;    
    int listOrMap;
}
@end
@implementation XYViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    resultList=[[XYTableView alloc] init];
    [resultList setDelegate:self];
    [resultList setDataSource:self];
    [self.view addSubview:resultList];
    dataArray1 = [[NSMutableArray alloc] initWithObjects:@"中国", @"美国", @"英国", nil];
    dataArray2 = [[NSMutableArray alloc] initWithObjects:@"黄种人", @"黑种人", @"白种人", nil];
    titleArray = [[NSMutableArray alloc] initWithObjects:@"国家", @"种族", nil];
    listOrMap=0;
    resultMap=[[MKMapView alloc] initWithFrame:CGRectMake(0, 50, 320, 410)];
    /*
    dispatch_queue_t qq=dispatch_queue_create("addsubview_queue",nil);
    dispatch_async(qq,^(void){
        [resultMap setAlpha:0.0];
        [self.view addSubview:resultMap];
    });
    dispatch_release(qq);
    */
    
    NSOperationQueue *queue=[[NSOperationQueue alloc] init];
    [queue addOperationWithBlock:^(void){
        [resultMap setAlpha:0.0];
        [self.view addSubview:resultMap];
    }];
    
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    switch (section) {
        case 0:
            return [titleArray objectAtIndex:section];//提取标题数组的元素用来显示标题
        case 1:
            return [titleArray objectAtIndex:section];//提取标题数组的元素用来显示标题
        default:
            return @"Unknown";
    }
}

//指定有多少个分区(Section),默认为1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [titleArray count];//返回标题数组中元素的个数来确定分区的个数
}
//指定每个分区中有多少行,默认为1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    switch (section) {
        case 0:
            return  [dataArray1 count];//每个分区通常对应不同的数组,返回其元素个数来确定分区的行数
            break;
        case 1:
            return  [dataArray2 count];
            break;
        default:
            return 0;
            break;
    }
}

//绘制Cell
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    //初始化cell并指定其类型,也可自定义cell
    UITableViewCell *cell = (UITableViewCell*)[tableView  dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
        {
            cell=[[UITableViewCell alloc] initWithFrame:CGRectZero];
            //cell = [[UITableViewCell alloc]    initWithFrame:CGRectZero   reuseIdentifier:CellIdentifier];
        }
    switch (indexPath.section) {
            case 0://对应各自的分区
            [[cell textLabel]  setText:[dataArray1 objectAtIndex:indexPath.row]];//给cell添加数据
            break;
            case 1:
            [[cell textLabel]  setText:[dataArray2 objectAtIndex:indexPath.row]];
            break;
            default:
            [[cell textLabel]  setText:@"Unknown"];
    }
    
    return cell;//返回cell
}


- (IBAction)switchListOrMap:(id)sender {
    self.switchMapAndList.title=listOrMap==0?@"list":@"map";
     listOrMap=listOrMap==0?1:0;
    [UIView animateWithDuration:0.3
                          delay:0.0
                        options:UIViewContentModeBottom
                     animations:^{
                         [resultMap setAlpha:listOrMap];
                     }
                     completion:^(BOOL completed){
                     }];
}
@end

阅读完这段代码,眼睛累。那么,就养养眼吧。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值