`
jaybril
  • 浏览: 50531 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

UITableView常用知识总结(转)

 
阅读更多
1:tableviewcell的宽度设置

在你的自定义的tableviewcell的m文件里加入下面方法:

  1. -(void)layoutSubviews  
  2. {  
  3. [super layoutSubviews];  
  4. CGRect frame = self.backgroundView.frame;  
  5.     frame.origin.x += 18;  
  6.     frame.size.width -= 36;  
  7.     self.backgroundView.frame = frame;  
  8.     frame = self.contentView.frame;  
  9.     frame.origin.x += 18;  
  10.     frame.size.width -= 36;  
  11.     self.contentView.frame = frame;  
  12. }  

 

重写了tableviewcell的layoutSubviews的方法,调整一下backgroundview和contentview的frame就行了。
 
UITableViewCell包含图像,文本等.

 

NSString *CellIdentifier = [ [ NSString alloc ] initWithString: @"Frank" ];

UITableViewCell *cell = [ [ [ UITableViewCell alloc ]

        initWithFrame: CGRectZero

        reuseIdentifier: CellIdentifier 

    ] autorelease

];

然后你可以为每一个cell设置不同的风格

(1) 显示文本: cell.text = @"Frank's Table Cell";

(2) 对齐: cell.textAlignment = UITextAlignmentLeft;
UITextAlignmentLeft 默认是左对齐

   UITextAlignmentRight 右对齐

   UITextAlignmentCenter 中对齐

(3) 字体和尺寸:
#import <UIKit/UIFont.h>

UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 18.0 ]; 

cell.font = myFont;

//系统字体

UIFont *mySystemFont = [ UIFont systemFontOfSize: 12.0 ];

UIFont *myBoldSystemFont = [ UIFont boldSystemFontOfSize: 12.0 ];

UIFont *myItalicSystemFont = [ UIFont italicSystemFontOfSize: 12.0 ];

(4) 颜色

#import <UIKit/UIColor.h>

//文本颜色

cell.textColor = [ UIColor redColor ];

//当前选择项的颜色

cell.selectedTextColor = [ UIColor blueColor ];

(5) 图像

//从你应用程序目录下的文件创建一个image

cell.image = [ UIImage imageNamed: @"cell.png" ];
//当前选中项的图形

cell.selectedImage = [ UIImage imageNamed: @"selected_cell.png" ];

可以修改table保准行高来适应你的图形高度

- (id)init 

{

    self = [ super init ];

    if (self != nil) {

        self.tableView.rowHeight = 65; 

    }

    return self; 

}

你也可以为每一个cell定义不同的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

{

    if ([ indexPath indexAtPosition: 1 ] == 0)

        return 65.0; 

    else

        return 40.0; 

}

(6)选中项的风格
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

UITableViewCellSelectionStyleBlue 默认选中项是蓝色

UITableViewCellSelectionStyleGray 灰色

UITableViewCellSelectionStyleNone 没有变化


(7)标签 (labels)


在偏移量100x0处创建一个尺寸50x50 label:

UILabel *label = [ [ UILabel alloc ] initWithFrame: CGRectMake(100.0, 0.0, 50.0, 50.0) ];
label.text = @"Label Text";
label.textAlignment = UITextAlignmentLeft;
label.textColor = [ UIColor redColor ];
label.font = [ UIFont fontWithName: @"Arial" size: 10.0 ];

标签label可以设置文本阴影,甚至可以定义阴影的偏移:

label.shadowColor = [ UIColor grayColor ];
label.shadowOffset = CGSizeMake(0, -1);

高亮是的颜色:

label.highlightedTextColor = [ UIColor blackColor ];
标签的背景色:

label.backgroundColor = [ UIColor blueColor ];

把标签加到cell里

[ cell addSubview: label ];

(8) 附件
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
Style Description
UITableViewCellAccessoryNone 没有附件
UITableViewCellAccessoryDisclosureIndicator 黑色向右的箭头
UITableViewCellAccessoryDetailDisclosureButton 蓝色附件按钮
UITableViewCellAccessoryCheckmark 复选框,支持选择

 

7.3 实现多选

- (void)tableView:(UITableView *)tableView

        didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSLog(@"Selected section %d, cell %d", 
        [ indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition: 1 ]); 
    //获的当前选择项
    UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath: indexPath ]; 
    //显示复选框
    if (cell.accessoryType == UITableViewCellAccessoryNone)
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    else
        cell.accessoryType = UITableViewCellAccessoryNone; 
}
7.4 编辑和删除

在允许用户删除和编辑的时候,每一个cell左边会显示一个红色删除图标

[ self.tableView setEditing:YES animated:YES ];
关闭编辑的时候,table顶部会显示一个Edit导航条

[ self.tableView setEditing: NO animated: YES ];

在编辑过程中,如果用户要删除该项,会弹出一个删除确认框. 确认后调UITableViewDataSource类的commitEditingStyle方法来通知你的应用程序, 然后你可以从你的底层数据源里删除该项,并通知table view删除该行.
- (void)tableView:(UITableView *)tableView
    commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
    forRowAtIndexPath:(NSIndexPath *) indexPath 
{
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        NSLog(@"Deleted section %d, cell %d", [ indexPath indexAtPosition: 0 ], [ indexPath indexAtPosition: 1 ]);
        NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
        [ array addObject: indexPath ];
        [ self.tableView deleteRowsAtIndexPaths: array
            withRowAnimation: UITableViewRowAnimationFade 
        ];
     }
}

通过传递一个数组给deleteRowsAtIndexPaths方法, 可以删除一行或多行.

 

withRowAnimation至此下列预定义的删除动画

 

Animation Description
UITableViewRowAnimationFade Cell fades out
UITableViewRowAnimationRight Cell slides out from right
UITableViewRowAnimationLeft Cell slides out from left
UITableViewRowAnimationTop Cell slides out to top of adjacent cell
UITableViewRowAnimationBottom Cell slides out to bottom of adjacent cell

 

7.5 重新加载表

当你的数据变了的时候,你可以重新加载整个表

[ self.tableView reloadData ];
7.6 TableDemo: Simple File Browser

这个例子列表你应用程序home目录里的文件和目录

 

(1) TableDemo main (main.m)
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"TableDemoAppDelegate");
    [pool release];
    return retVal; 
}

(2)TableDemo application delegate

prototypes (TableDemoAppDelegate.h)

 

#import <UIKit/UIKit.h>
@class TableDemoViewController;
@interface TableDemoAppDelegate : NSObject <UIApplicationDelegate> 
{
    UIWindow *window;
    TableDemoViewController *viewController;
    UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TableDemoViewController *viewController;
@end

(TableDemoAppDelegate.m)

#import "TableDemoAppDelegate.h"
#import "TableDemoViewController.h"
@implementation TableDemoAppDelegate
@synthesize window;
@synthesize viewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
    CGRect screenBounds = [ [ UIScreen mainScreen ] bounds ];
    self.window = [ [ [ UIWindow alloc ] initWithFrame: screenBounds ] autorelease ];
    viewController = [ [ TableDemoViewController alloc ] init ];
    navigationController = [ [ UINavigationController alloc ] init
        WithRootViewController: viewController
    ];
    [ window addSubview: [ navigationController view ] ];
    [ window makeKeyAndVisible ];
}
- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}
@end

(3) TableDemo view controller

prototype (TableDemoViewController.h)

#import <UIKit/UIKit.h>
@interface TableDemoViewController : UITableViewController {
    NSMutableArray *fileList;
}
- (void) startEditing;
- (void) stopEditing;
- (void) reload;
@end

(TableDemoViewController.m)

#import "TableDemoViewController.h"
@implementation TableDemoViewController 
- (id)init {
    self = [ super init ];
    if (self != nil) {
        [ self reload ];
        self.navigationItem.rightBarButtonItem = [ [ [ UIBarButtonItem alloc ]
            initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
            target: self
            action: @selector(startEditing)
            ] autorelease 
        ];
        self.navigationItem.leftBarButtonItem = [ [ [ UIBarButtonItem alloc ]
            initWithTitle:@"Reload"
            style: UIBarButtonItemStylePlain
            target: self
            action:@selector(reload) 
            ] autorelease
        ]; 
    }
    return self;
}
- (void) stopEditing {
    [ self.tableView setEditing: NO animated: YES ];
    self.navigationItem.rightBarButtonItem
    = [ [ [ UIBarButtonItem alloc ]
       initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
       target: self
       action: @selector(startEditing) ] autorelease ];
}

- (void) reload {
    NSDirectoryEnumerator *dirEnum;
    NSString *file;
    fileList = [ [ NSMutableArray alloc ] init ];
    dirEnum = [ [ NSFileManager defaultManager ] enumeratorAtPath:
        NSHomeDirectory()
    ];
    while ((file = [ dirEnum nextObject ])) {
        [ fileList addObject: file ];
    }
    [ self.tableView reloadData ];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsIn
Section:(NSInteger)section {
    return [ fileList count ];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRow
AtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = [ fileList objectAtIndex:
        [ indexPath indexAtPosition: 1 ]
    ];
    UITableViewCell *cell = [ tableView
        dequeueReusableCellWithIdentifier: CellIdentifier
    ];
    if (cell == nil) {
        cell = [ [ [ UITableViewCell alloc ] initWithFrame:
            CGRectZero reuseIdentifier: CellIdentifier ] autorelease
        ];
        cell.text = CellIdentifier;
        UIFont *font = [ UIFont fontWithName: @"Courier" size: 12.0 ];
        cell.font = font;
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView
    commitEditingStyle:(UITableViewCellEditingStyle) editingStyle
    forRowAtIndexPath:(NSIndexPath *) indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        
        UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath:
            indexPath ];
        for(int i = 0; i < [ fileList count ]; i++) {
            if ([ cell.text isEqualToString: [ fileList objectAtIndex: i ] ]) {
                [ fileList removeObjectAtIndex: i ];
            }
        }
        
        NSMutableArray *array = [ [ NSMutableArray alloc ] init ];
        [ array addObject: indexPath ];
        [ self.tableView deleteRowsAtIndexPaths: array
            withRowAnimation: UITableViewRowAnimationTop
        ];

    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAt
IndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [ self.tableView cellForRowAtIndexPath: indexPath ];
    UIAlertView *alert = [ [ UIAlertView alloc ] initWithTitle: @"File Selected"
        message: [ NSString stringWithFormat: @"You selected the file '%@'",
                       cell.text ]
        delegate: nil
        cancelButtonTitle: nil
        otherButtonTitles: @"OK", nil
    ];
    [ alert show ];
}
- (void)loadView {
    [ super loadView ];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterface
Orientation)interfaceOrientation {
    return YES;
}
- (void)didReceiveMemoryWarning {
    [ super didReceiveMemoryWarning ];
}
- (void)dealloc {
    [ fileList release ];
    [ super dealloc ];
}
@end

 

转载自:http://blog.sina.com.cn/s/articlelist_1654117677_0_1.html(这个作者还有很多关于tableview的使用指南,赞一个!!!用到常看看)

分享到:
评论

相关推荐

    IOS代码中使用自定义UITableView

    在iOS应用开发中,UITableView是一种常用的UI组件,用于展示列表数据。它允许用户滚动查看多个行项目,并且可以根据需要进行高度自定义。本篇文章将深入探讨如何在代码中实现自定义UITableView,以及在开发过程中应...

    UITableView高度自适应解决方法

    在iOS开发中,UITableView是一种常用的数据展示控件,用于显示多行可滚动的数据。然而,在实际应用中,我们经常遇到的一个问题是如何实现UITableView的高度自适应,即让每一行cell的高度根据其内容动态调整。本教程...

    iOS 常用的知识点总结

    【标题】:“iOS 常用的知识点总结” 在iOS开发中,Swift是主要的编程语言,它以其简洁、安全的语法深受开发者喜爱。这里,我们聚焦于“iOS常用的知识点总结”,通过作者fengzhihao123的项目FZHKit,我们可以深入...

    iOS7 App Development Essentials

    总结以上知识点,可以得出本书详细覆盖了以下几个关键点: 1. 加入苹果iOS开发者计划和理解其流程。 2. 安装和配置Xcode 5及iOS 7 SDK。 3. 创建基础iOS 7应用的步骤和遇到常见问题的处理方法。 4. 测试和适配应用...

    iOS自己用的几个demo

    描述中提到了“各种传值方法”,“json和xml的解析方法”,“网络异步多线程请求”,“文件IO”以及“数据库操作”,“UITableView的使用总结”。让我们逐一深入探讨这些知识点。 1. **传值方法**:在iOS应用中,...

    ios-CollectionView与TableView结合商品分类列表.zip

    总结来说,这个项目的核心知识点包括: - `UICollectionView`和`UITableView`的组合使用 - `UICollectionViewCell`与`UITableViewCell`的定制 - 视图控制器中处理点击事件和视图动态显示的逻辑 - 自定义布局和Auto ...

    移动软件开发-3期(KC015) 案例 小i聊天机器人代码实现.docx

    1. **UITableView**: UITableView是iOS应用中常用的一个控件,用于显示列表或表格数据。在这个案例中,它被用来呈现用户与聊天机器人之间的对话历史。通过连接storyboard中的UITableView到ViewController,可以实现...

    IOS应用源码——在UIPickerView 选择时,UITableViewCell自动填充值.rar

    总结起来,这个源码项目展示了如何结合 UIPickerView 和 UITableView 实现用户交互和数据同步,这对于开发 iOS 应用中常见的表单界面非常有用。通过学习和理解这个示例,开发者可以更好地掌握 iOS UI 组件间的协同...

    IOS应用源码——社会化媒体分享(table view视图).zip

    UITableView是iOS开发中最常用的控件之一,用于呈现列表或表格数据。在这个项目中,UITableView被用来展示不同的社交媒体平台,比如微信、微博、Facebook、Twitter等。每个平台会被表示为一个单元格(cell),用户...

    ios-swift 3 tableview cell 自适应文字展开动画.zip

    总结起来,"ios-swift 3 tableview cell 自适应文字展开动画"这个主题涵盖了Swift开发中UITableView的自定义、事件处理、动画效果以及性能优化等多个知识点,是提升iOS应用用户体验的重要技巧。通过实际项目实践,...

    iOS 开发总结

    这份"iOS开发总结"文档可能涵盖了从基础概念到高级技术的各种知识点,旨在帮助开发者提升技能和解决问题。 首先,iOS开发主要基于Apple的Swift编程语言,这是一种现代化、高性能的语言,具有安全性和易于读写的特点...

    天气TableView

    总结来说,"天气TableView"项目涵盖了`UITableView`的使用、网络请求、JSON解析、数据源管理和用户交互等多个知识点。通过这个项目,开发者不仅可以提升iOS应用开发技能,还能深入理解数据驱动UI的设计理念和网络...

    iOS开发总结

    在Objective-C中代码混编涉及将C语言代码嵌入到Objective-C程序中,而代码中的字符串换行则常用反斜杠 "\" 来实现。此外,不要在代码中调用[super release],因为它是自动完成的。判断一个字符串是否包含另一个字符...

    ios-快速搭建个人中心以及设置界面.zip

    数组是一种常用的数据结构,用于存储一系列相同类型的对象。在iOS开发中,数组可以用来存储用户信息、设置项等,然后遍历数组来动态创建视图。这种方法灵活且高效,尤其适用于界面元素数量不固定或可能变化的情况。 ...

    IOS开发书籍

    - **数组**:存储表视图数据的常用数据结构。 ##### 第四部分:“定制UITableView表视图单元格” - **关键技术点**: - **自定义单元格**:通过创建自定义UITableViewCell子类来增强UI。 - **Property和Outlet**...

    IOS 开发总结

    ### IOS 开发总结知识点 #### Xcode 快捷键 Xcode 提供了一系列快捷键来提高开发者的工作效率。例如,使用 `command + shift + L` 可以快速打开项目中的库面板,`command + shift + O` 可以快速打开类文件,而 `...

    iOS日期选择器

    在iOS应用开发中,日期选择器(Date Picker)是一个常用组件,它允许用户方便地选取特定日期或时间。本文将详细讲解iOS中的日期选择器,尤其是`MZDayPicker`这个库,以及与ISO日期格式相关的知识。 首先,我们来...

    ios-高仿版QQ最新版.zip

    在iOS开发中,创建一个高仿版QQ的最新界面是一项挑战性的任务,涉及到多个关键知识点。这个"ios-高仿版QQ最新版.zip"压缩包很可能是包含了一个开发者尝试模仿QQ最新界面的代码和资源文件。让我们深入探讨一下在这个...

Global site tag (gtag.js) - Google Analytics