分享

添UITableView 到自定义的UIViewController的操作

 没原创_去搜索 2015-07-09
加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条评论

    发表

    请遵守用户 评论公约

    类似文章 更多