【iOS】UITableView


UITableView 兩三事 (未完)

  • 指定 Data Source
    (tbd)
  • Handle
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  • TableView 風格
    - UITableViewStyleGrouped
  • UITableViewCell 風格
    - UITableViewCellStyleDefault
    - UITableViewCellStyleValue1
    - UITableViewCellStyleValue2
    - UITableViewCellStyleSubtitle
  • 建議 在 cellForRowAtIndexPath 中指定 cell reuse ,附帶一提 雖然指定為UITableViewCellStyleDefault 但也可以將附帶元件放到指定的座標,下面提供範例

    static NSString *reuseCellName= @"reuseCellName";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseCellName];
    if (cell == nil) {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
    reuseIdentifier:reuseCellName] autorelease];
    }

  • 依序取出 NSMutableDictionary 裡面內容
    通常會把資料存在 NSMutableArray/NSArray 透過 indexPath.row 順序抓出,不過有可能會把資料存在 NSMutableDictionary/NSDictionary 這樣抓資料的話要透過

    NSUInteger row = [indexPath row];
    NSArray *keys = [fileFromDictionary allKeys];
    id key = [keys objectAtIndex:row];
    NSString *filename = [fileFromDictionary objectForKey:key];

  • 在 xcode4 指定圖示的方式要透過 UIImageView,不建議再用 cell.image

    UIImageView *imageView = [[UIImageView alloc] 
    initWithImage:[UIImage imageNamed:@"dialog_btn_bg_blue.png"]];
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    [cell.imageView setImage:imageView.image];

  • 系統已內建將顯示圖示改為圓角的功能
    cell.imageView.layer.masksToBounds = YES;
    cell.imageView.layer.cornerRadius = 8.0;
  • cell.textLabel.text 中指定文字和圖形距離,如果不事差太遠的話,前面加空白是個簡單的作法

    // keep distance from image 
    cell.textLabel.text = @"   Gamepad profile name";


    較為正式的作法請參考 法一 法二
  • 在 UITableViewCellStyleDefault 但也可以將附帶元件放到指定的位置,只要將做出來的元件加到 cell.contentView ,附帶一提 以下的 UIBButton 使用使用者自定底色

    // Button
    UIImage *buttonImg = [UIImage imageNamed:@"dialog_btn_bg_blue.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:CGRectMake(6 + 98 + 281, 22.0f, 50.0f, 29.0f)];
    [button setBackgroundImage:buttonImg forState:UIControlStateNormal];
    [button setTitle:@"Load" forState:UIControlStateNormal];
    [button.titleLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12]];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [button addTarget: self action: @selector(doSomething:) forControlEvents: UIControlEventTouchDown];
    [button setTag: indexPath.row];
    [cell.contentView addSubview: button];
    [cell.contentView bringSubviewToFront:button];
    [buttonImg release];

  • 去除邊框
    separatorColor=[UIColor clearColor];
    http://blog.csdn.net/zhouhuishine/article/details/5715556
  • 讓選定的項目不要有特殊顏色

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

  • 當 didSelectRowAtIndexPath 卻要更改其他的 cell
  • - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.detailTextLabel.text = @"更改";
        NSIndexPath *tempIndex = [NSIndexPath indexPathForRow:1 inSection:1];
        UITableViewCell *tempCell = [tableView cellForRowAtIndexPath:tempIndex];
        tempCell.detailTextLabel.text = @"連動";
        [cell setNeedsLayout];
    }

  • Table/Cell refresh
    - Table: [tableView reloadData];
    - Cell: [cell setNeedsLayout];
  • TDBadgedCell
    https://github.com/tmdvs/TDBadgedCell/wiki/using-the-class
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com