fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2014/03/30

[iOS] UITableView & UITableViewDataSource


我是UITableView,我負責以表格的方式呈現資料


我是UITableViewDataSource,我負責接受UITableView的資料委派工作,提供UITableView顯示用的資料



UITableView說:那我們合作吧,你提供資料,我在以表格顯示。






第1步:建立一個名為"UITableView_UITableViewDataSource"的"Single View Application"專案。


第2步:加入UITableView




第3步:建立UIViewTable的IBOutlet

  • 加入UITableView的IBOutlet並取名為"tableView"




第4步:ViewController委派UITableViewDataSource的工作

  • 於"ViewController.m"檔中,準備顯示的連絡人資料,宣告一個_contacts陣列變數,並於viewDidLoad方法中建立連絡人陣列,並存於_contacts陣列中
#import "ViewController.h" @interface ViewController () { //宣告一個存放連絡人的陣列變數,_contacts NSArray * _contacts; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //建立一個連絡人陣列物件,並存放於_contacts變數中 _contacts = [[NSArray alloc] initWithObjects: @"Jack" , @"Eric" , @"Jason" , @"Ray" , @"Kevin" , @"Jason" , nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

  • 為"ViewController"加上"UITableViewDataSource" protocol協定,於UIViewController後方加上"<UITableViewDataSource>"


        @interface ViewController : UIViewController <UITableViewDataSource> 

        @end 
//實作UITableViewDataSource協定 @interface ViewController : UIViewController <UITableviewDataSource> @property (strong, nonatomic) IBOutlet UITableView *tableView; @end

//UITableViewDataSource上的方法, //用以表示有多少筆資料, //在此回傳_contacts陣列的個數 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_contacts count]; }

  • 於"ViewController.m"檔中實作 "– tableView:cellForRowAtIndexPath:"方法,以依照列數回傳UITableViewCell物件,而UITableViewCell物件即是UITableView用來顯示一筆資料的物件。在此建立UITableViewCell物件,透過indexPath的row屬性取得列數,取出_contacts陣列中的連絡人資訊,並設定給UITableViewCell,最後回傳cell物件,以供UITabelView顯示於畫面上(在此為了更容易了解程式,以直接建立UITableView的方式取得cell物件,正確的寫法應是可將同性質的UITableViewCell拿來重複使用才對)。
//UITableViewDataSource上的方法, //回傳TableView顯示每列資料用的UITableViewCell - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //建立UITableViewCell物件 UITableViewCell *cell = [[UITableViewCell alloc] init]; //UITableViewCell有個屬性為textLabel, //其是⼀一個UILabel物件, //透過setText可設定其顯示的字樣 [cell.textLabel setText:[_contacts objectAtIndex:[indexPath row]]]; //回傳cell物件,以供UITableView顯示在畫面上 return cell; }

第5步:設定UITableView的dataSource委派
  • 將實作"UITableViewDataSource"的ViewController(self),指派至UIViewTable的dataSource屬性中,好將UITableView取得資料的工作委派給ViewController(self)物件。當然,UITableView則會以"UITableViewDataSource"protocol協定向ViewController物件要資料。
- (void)viewDidLoad { [super viewDidLoad]; //建立一個連絡人陣列物件,並存放於_contacts變數中 _contacts = [[NSArray alloc] initWithObjects: @"Jack" , @"Eric" , @"Jason" , @"Ray" , @"Kevin" , @"Jason" , nil]; //將實作UIViewTableDataSource的ViewController(self), //指派給UITable的dataSource屬性中, //好將UITableView取得資料的工作, //委派給ViewController(self)物件。 self.tableView.dataSource = self; }

第6步:執行
  • 這時畫面上會出現6筆資料,這即是UITableView可以以表格的方式顯示資料,當然它會與UITableViewDataSource協定合作,透過實作UITableViewDataSource的物件(在此為ViewController)提供UITableView資料






檔案連結:UITableView_UITableViewDataSource.zip





更多的UITableView資訊: