当前位置:  编程技术>移动开发
本页文章导读:
    ▪自定义UItableView的实现以及组件不可见的有关问题及解决        自定义UItableView的实现以及组件不可见的问题及解决       有时需要写一个自定义的UITableView,这里的自定义UITableView指的是自定义列表内容,通常就是实现一个UITableViewCell的子类,如MyTableVi.........
    ▪ Object-C种实例        Object-C类实例Object-C类实例的生命周期:创建对象,接收消息,释放对象 1.创建对象 alloc创建对象,init初始化 举例:NSMutableArray *arrayInstance = [[NSMutableArray alloc] init]; 嵌套消息发送:将两个消.........
    ▪ UITableView 的使用小品种       UITableView 的使用小类别 一)UITableView所在的UIViewController声明两个delegate:UITableViewDelegate和UITableViewDataSource。 二)将UITableView对象的delegate设置成self。 三)根据实际需要实现delegate的具体方.........

[1]自定义UItableView的实现以及组件不可见的有关问题及解决
    来源: 互联网  发布时间: 2014-02-18
自定义UItableView的实现以及组件不可见的问题及解决

       有时需要写一个自定义的UITableView,这里的自定义UITableView指的是自定义列表内容,通常就是实现一个UITableViewCell的子类,如MyTableViewCell。下面先来实现一个自定义组件。

        STEP 1.

        新建一个Empty Application,这里我就叫MyTableViewTest,勾选ARC选项。

        STEP 2.

        新建一个ViewController对象,注意不需要生成xib文件,这里我就叫MyViewController

        STEP 3.

        在AppDelegate.m中指定MyViewController为程序的rootViewController

    //指定rootViewController对象
    MyTableViewController *controller = [[MyTableViewController alloc]init];
    self.window.rootViewController = controller;
          STEP 4.

        新建自定义的列表项的xib文件,新建一个empty interface builder文件,就叫MyUITableViewCell,会自动生成为MyUITableViewCell.xib文件。拖动一个UITableViewCell组件进来,再将不同的组件(如UILabel,UIButton)拖动进该UITableViewCell中,详见截图:

         STEP 5.

        new一个UITableViewCell的子类,就叫MyUITableViewCell,这个类其实更像一个容器类。并对xib文件中的UILabel和UIButton进行连接。这里有一个需要注意的地方。就是MyUITableViewCell的File's owner是什么并不重要(比如可以是NSObject),只需要将Cell上的UIButton和UILable连接到Cell上即可。怎么连接呢?先在MyUITableViewCell.h中定义对应的property属性,如myLabel和myButton。然后右击UILable弹出一个黑色的框框,选择其中的Referencing Outlets下的New Referencing Outlet,拖到鼠标到左侧的组件MyUITableViewCell上,此时会自动弹出一个黑色的框框,选中myLabel即可。

详见下图:

        



        这里必须讨论一下为什么将组件链接到MyUITabelViewCell上,而不是File's owner。其实刚开始我是直接把组件链接到File's owner上的,但是这样之后就直接报错了。于是就google,找了一段解释,可以看看


Normally you don't have to bother about the File's owner in that case, because when the tableViewinstantiate the cell from the UINib you provided / associated with the reuseIdentifier, it will load all the top-level objects of the nib, and use only the first top-level object that is of classUITableViewCell (or maybe juste the first top-level-object regardless of the class? but in general you only have your UITableViewCell in your XIB anyway — without counting the File's Owner and the First Responder which are only "proxies").

In fact, when the tableView try to dequeue a cell and don't find a reusable one, so create a new one for you, it uses the UINib you provided quite like this:

NSArray* topLevelObjects = [self.cellNib instantiateWithOwner:nil options:0];
cell = [topLevelObjects objectAtIndex:0];

(That's of course a simplified version just to show the principle, I don't know if it actually call only these exact lines, but it should be quite close)

So the File's Owner is not used in this particular case, and you only need to put a simple customUITableViewCell as the only top-level-object of your XIB file next to the existing File's Owneranf First Responder (that, again, are only "proxies" / "External Objects references" and won't be instantiated and won't be part of the top-level-objects returned byinstantiateWithOwner:options:).

原文地址:http://stackoverflow.com/questions/12590471/uitableview-registernibforcellreuseidentifier

         STEP 6.

        因为没有为MyViewController生成xib文件,所以我们需要在MyViewController的代码中来手动添加组件,这里在viewDidLoad方法中添加。那么出于调用方便的考虑,可以在MyViewController.h中定义UITableView的属性。当然不要忘了实现UITableView对应的Delegate和Datasource协议。下面是 MyViewController.h:

//
//  MyTableViewController.h
//  MyTableViewTest
//
//  Created by wly on 13-10-15.
//  Copyright (c) 2013年 wly. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MyTableViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@property (nonatomic,strong) IBOutlet UITableView *myTableView;
@end

          STEP 7.

        在MyViewController.m中实现UITableView的代理方法,并将UITableView添加到self.view上即可。MyViewController.m:

//
//  MyTableViewController.m
//  MyTableViewTest
//
//  Created by wly on 13-10-15.
//  Copyright (c) 2013年 wly. All rights reserved.
//

#import "MyTableViewController.h"
#import "MyUITableViewCell.h"
@interface MyTableViewController ()

@end

@implementation MyTableViewController
@synthesize myTableView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    //由于没有xib文件,即无法通过control建立组件和delegate或datasource之间的链接,这里就需要手动指定了
    myTableView = [[UITableView alloc]init];
    myTableView.delegate = self;
    myTableView.dataSource = self;
    
    //需要注意一个问题,手动添加组件,总是忘了设置tableview的frame属性,导致组件不可见
    myTableView.frame = CGRectMake(0, 0, 320, 568);
    [self.view addSubview:myTableView];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 10;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 72.0;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *tag = @"cellTag";

    
    //一个关键问题
    //1.使用自定义的MyUITableViewCell,但是没有使用registerNib,显示空白行
//    MyUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tag];
//    if(cell == nil) {
//        cell = [[MyUITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tag];
//    }
//    [cell.myButton setTitle:@"Let's go" forState:UIControlStateNormal];
//    [cell.myButton setBackgroundColor:[UIColor redColor]];

    //2.使用默认的UITableViewCell,显示正确
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tag];
//    if(cell == nil) {
//        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tag];
//    }
//    
//    [cell.textLabel setText:@"ABC"];
//    [cell.textLabel setTextColor:[UIColor redColor]];
//    [cell.imageView setImage:[UIImage imageNamed:@"default"]];
    
    //3.使用自定义的MyUITableViewCell,显示正常
    static BOOL nibsRegistered = NO;
    if(!nibsRegistered) {
        UINib *nib = [UINib nibWithNibName:@"MyUITableViewCell" bundle:nil];
        [tableView registerNib:nib forCellReuseIdentifier:tag];
        nibsRegistered = YES;
    }
    MyUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tag];
    [cell.myLabel setText:@"abc"];
    
    
    return cell;
}
@end

程序运行结果:

           O啦~~~,写了挺久的,终于好啦

         转帖请保留出处:http://write.blog.csdn.net/postedit/12745165

            工程下载地址:http://download.csdn.net/detail/u011638883/6404331

         谢谢!!


    
[2] Object-C种实例
    来源: 互联网  发布时间: 2014-02-18
Object-C类实例

Object-C类实例的生命周期:创建对象,接收消息,释放对象

1.创建对象

alloc创建对象,init初始化

举例:NSMutableArray *arrayInstance = [[NSMutableArray alloc] init];

嵌套消息发送:将两个消息合写在一行代码中的做法。

2.发送消息

消息必须写在一对方括号中,包含三部分:

(1)receiver(接收方):指针,指向执行方法的对象;

(2)selector(选择器):将要执行的方法的方法名

(3)arguments(参数):以变量形式传给方法的数值

举例:[arrayInstance addObject:anotherObject]一个参数,发送消息是addObject:

            [arrayInstance replaceObjectsInRange:aRange

                                            withObjectsFromArray:anotherArray

                                                                          range:anotherRange]三个参数,发送消息是replaceObject是InRange:withObjectsFromArray:range

注意:一个类不能有同名的方法

3.释放对象

举例:[arrayInstance release]没有参数

对象释放后,arrayInstance仍然指向NSMutableArray实例曾经的地址,直接使用会报错,因为指向的对象已经不存在。

arrayInstance = nil;指针置空后,不会报错(因此不需要像java那样做空指针判断),但不会执行任何操作。




    
[3] UITableView 的使用小品种
    来源: 互联网  发布时间: 2014-02-18
UITableView 的使用小类别

一)UITableView所在的UIViewController声明两个delegate:UITableViewDelegate和UITableViewDataSource。

二)将UITableView对象的delegate设置成self。

三)根据实际需要实现delegate的具体方法,这里简要介绍一下常用的方法和属性。

(1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 该方法返回tableview有多少个section。

(2)- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section 该方法返回对应的section有多少个元素,也就是每个section对应有多少个cell。

(3)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 该方法返回指定的row高度。

- (CGFloat)tableView:(UITableView *)tableView  heightForHeaderInSection:(NSInteger)section 该方法返回指定的section的header view的高度。

- (CGFloat)tableView:(UITableView *)tableView  heightForFooterInSection:(NSInteger)section 该方法返回指定的section的footer view的高度。

(4)- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 该方法返回指定row的cell,在此函数中用户可以根据自己的需求定义cell的属性和显示风格等(主标题cell.textLabel,副标题cell.detailTextLabel,背景cell.imageView,图标cell.accessoryType等等)。

(5)- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 该函数返回指定section的header的titile。

(6)- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 该函数返回指定section header的view

(7)  -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 用户选中某cell时的回调函数。

(8)- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 该方法获取某一cell对象。

(9)如果想让cell能响应选中事件,但是选中后的颜色不发生改变的话,设置cell.selectionStyle = UITableViewCellSelectionStyleNone。

(10)如果想删除cell之间的分割线,设置

tableview.separatorStyle = UITableViewCellSeparatorStyleNone。

以上介绍的方法及属性仅仅是GRE用到的,另外还有很多方法和属性未涉及。本篇文章只是抛砖引玉,等我们需要用到的时候可以参考xCode的联机帮助手册。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之自定义Menu(TabMenu)实现方法 iis7站长之家
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3