Bài viết này sẽ hướng dẫn tạo 1 tableView đơn giản với protocol. Nội dung chính bao gồm:
- Nhập vào số dòng, sẽ tự tạo ra 1 button ứng với 1 dòng.
- Click vào button nào thì sẽ cho biết mình đang click trên dòng nào,button nào.
- Khi gọi reloadData nó sẽ tự khởi tạo lại.
Trong file DataSourceDemo.h tạo 1 protocol có tên là DataSouceDemo. Trong UIViewDemo khai báo 1 biến delegate có dạng như sau:
-(void)setDataSource:(id<DataSourceDemo>)dataSource_tmp và trong hàm này ta gán : dataSource = dataSource_tmp
- Khai báo 1 biến toàn cục là nuhmberOfRow để quản lý số dòng được tạo ra.
Để có thể tạo ra 20 button tương ứng với 20 dòng, trong hàm setDataSource ta làm như sau : add 1 scrollView để user có thể scroll lên xuống, trong scrollView chứa 20 button tương ứng với 20 dòng.
Lưu ý : nhớ gán demo.dataSource = self
- Trong protocol khai báo 1 hàm -(NSUInteger)numberOfRow với kiểu dữ liệu trả về là NSUInterger là tổng số dòng.
- Cuối cùng trong file ViewController.m ta chỉ việc khai báo thêm hàm numberOfRow và trả về số dòng mà chúng ta muốn load lên.
[button addTarget:self action:@selector(btClick:) forControlEvents:UIControlEventTouchUpInside];
- Để từ bên lớp ViewController biết được user đang click button ở dòng nào ta khai báo thêm hàm :
-(void) SelectedAtIndexPath:(NSUInteger) indexPath ở protocol.
- Tương tự như khai báo hàm numberOfRow. Trong hàm - (void) btClick:(id)sender ta tiến hành kiểm tra có tồn tại dataSource và responds tới hàm SelectedAtIndexPath: hay không. Nếu có thì dataSource tiến hành gọi hàm SelectedAtIndexPath: tham số truyền vào chính là tag của button đó.
- Trong file ViewController.m ta chỉ việc khai báo thêm hàm
-(void) SelectedAtIndexPath:(NSUInteger) indexPath và NSLog ra indexPath. indexPath chính là tag của button được truyền vào khi user click vào.
- Nội dung cuối cùng : khi click vào 1 button tương ứng với 1 dòng, ta sẽ tiến hành reload lại dữ liệu.
Đầu tiên trong file UIViewDemo ta khai báo hàm - (void)reloadData;
- Và hàm này thực hiện những chức năng sau :
- Xoá hết và load lại giao diện.
[demo reloadData];
Cuối cùng là khuyến mãi kèm theo :) sampleSourceCode