UITableView基本介绍(一)

上篇博客大致讲解了UIScrollView的使用,相信大家对于UIScrolView已经有一定了解了。那其实在实际的开发中,我们使用更多的可能还是UITableView。学会使用UITableView还是非常重要的,今天就仔细讲解一下UITableview的实际使用。

1.先从最基本的使用开始。

首先要知道几个事情:(1)UITableView有两种样式:(普通样式)UITableViewStylePalin/(分组显示)UITableViewStyleGrouped

                                      (2)   UITableView是继承自UIScrollView的,所以UIScrollView的一些属性和方法也适用于UITableView。

                                     (3)UITableView要显示数据必须要实现UITableViewDataSource代理

                                              @required(必须实现)

                                               》//返回每一部分有几行cell

                                                  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

                                               》//每一行cell的具体显示

                                                - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
                                              @optional(选择实现)

                                              》//返回有几个部分,默认是1(如果不实现该方法)

                                                - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;   

   下面通过一个小例子实际使用一下UITableVIew,同时看一下两种样式的差别。

#import "ViewController.h"

@interface ViewController ()<UITableViewDataSource>
@property(nonatomic,strong)UITableView *tableView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView=[[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
    //self.tableView=[[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
    self.tableView.contentInset=UIEdgeInsetsMake(20, 0, 0, 0);
     self.tableView.dataSource=self;
    [self.view addSubview:self.tableView];
    
 }

#pragma mark -UITableViewDataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 5;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId=@"cellId";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellId];
    if(!cell)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    cell.textLabel.text=@"测试文本";
    return cell;
}
@end
  实际效果: 
    

Palin:   

Grouped:

很明显:Palin样式并没有明显区分不同部分,而Grouped样式很明显有分组。

1)注意一点:UITableViewStylePalin样式在头部是没有一条直线的,而UITableViewStyle在每一部分的头部都有一条左边顶格的直线。可以根据实际需求来选择样式。

2)大家应该发现了不管哪一个样式,中间的每一条cell分割线都不是左边顶格的,那如何使其左边顶格呢?

     -->首先对UITableView设置:

[self.tableView setSeparatorInset:UIEdgeInsetsZero];
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
    -->然后实现UITableViewDelegate代理

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
效果图如下:



有时候也可能不想要这个分割线,那就更简单了。一句话搞定:

self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;


4.有时候会有这样一种情况,样式使用的是UITableviewStylePlain,但是显示的cell不没有占满整个屏幕,但是剩余屏幕会有多余的线,那如何删除这些多余线呢?

具体情景描述如下:

#import "ViewController.h"

@interface ViewController ()<UITableViewDataSource>
@property(nonatomic,strong)UITableView *tableView;
@property(nonatomic,strong)NSArray *dataSourceArray;
@end

@implementation ViewController
//懒加载
-(NSArray *)dataSourceArray
{
    if(!_dataSourceArray)
    {
        _dataSourceArray=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
    }
    return _dataSourceArray;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView=[[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
     self.tableView.dataSource=self;
    [self.view addSubview:self.tableView];
    
 }

#pragma mark -UITableViewDataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.dataSourceArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId=@"cellId";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellId];
    if(!cell)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    cell.textLabel.text=self.dataSourceArray[indexPath.row];
    return cell;
}
@end

一句话搞定:

self.tableView.tableFooterView=[[UIView alloc]init];


上面的提到的其实并没有什么难度,都是实际开发中常遇到的小细节,不过所谓细节决定成败,这些东西还是要注意的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS中,一个视图只能有一个UITableView。但是可以通过创建多个UITableView来实现一个视图中显示多个表格的效果。以下是一个示例代码: 首先,你需要在视图控制器中添加多个UITableView的实例变量: ```swift class YourViewController: UIViewController { var tableView1: UITableView! var tableView2: UITableView! // ... } ``` 然后,在视图加载完成后,你可以创建和配置这些UITableView的实例: ```swift override func viewDidLoad() { super.viewDidLoad() // 创建第一个UITableView tableView1 = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height/2)) tableView1.dataSource = self tableView1.delegate = self view.addSubview(tableView1) // 创建第二个UITableView tableView2 = UITableView(frame: CGRect(x: 0, y: view.frame.height/2, width: view.frame.width, height: view.frame.height/2)) tableView2.dataSource = self tableView2.delegate = self view.addSubview(tableView2) // ... } ``` 接下来,你需要实现UITableViewDataSource和UITableViewDelegate协议的相关方法来提供表格的数据和处理交互事件。例如: ```swift extension YourViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == tableView1 { // 返回第一个UITableView的行数 return 10 } else if tableView == tableView2 { // 返回第二个UITableView的行数 return 5 } return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) if tableView == tableView1 { // 配置第一个UITableView的单元格 cell.textLabel?.text = "Table View 1 - Row \(indexPath.row)" } else if tableView == tableView2 { // 配置第二个UITableView的单元格 cell.textLabel?.text = "Table View 2 - Row \(indexPath.row)" } return cell } } extension YourViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if tableView == tableView1 { // 处理第一个UITableView的行选中事件 print("Table View 1 - Row \(indexPath.row) selected") } else if tableView == tableView2 { // 处理第二个UITableView的行选中事件 print("Table View 2 - Row \(indexPath.row) selected") } } } ``` 这样,你就可以在同一个视图中使用多个UITableView了。记得在视图控制器中遵循UITableViewDataSource和UITableViewDelegate协议,并在视图加载完成后设置数据源和代理。 希望这能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值