2013-04-10 43 views
6

Tôi mới phát triển iPhone.Làm thế nào tôi có thể thiết lập đúng Hình nền của một TableView được nhóm?

Tôi biết có thể có câu trả lời có liên quan đến câu hỏi của tôi nhưng không ai giúp tôi.

Theo tiêu đề tôi có UITableView với kiểu được nhóm. Tôi muốn đặt hình nền nhưng tôi không thể đặt hình ảnh đúng cách.

Nhưng vấn đề là như mô tả trong Ảnh chụp màn hình của tôi.

enter image description here

Vâng tôi muốn hiển thị xem hình ảnh của tôi chỉ khu vực đó mô tả bởi cells của UITableView (nhóm)

Đây là mã của tôi:

self.tblView = [[UITableView alloc]initWithFrame:CGRectMake(0, 125, 320, 320) style:UITableViewStyleGrouped]; 

    UIImageView *bgTableImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, 320, 320)]; 
    bgTableImageView.image = [UIImage imageNamed:@"bgImage.png"]; 

    self.tblView.backgroundColor=[UIColor clearColor]; 
    [self.tblView setBackgroundView:bgTableImageView]; 

    //self.tblView.backgroundView = nil; 
    // self.tblView.opaque = NO; 
    //self.tblView.bounces = NO; 
    //self.tblView.scrollEnabled = YES; 
    self.tblView.delegate=self; 
    self.tblView.dataSource=self; 
    self.tblView.separatorColor = [UIColor darkGrayColor]; 
    self.tblView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
    [self.view addSubview:self.tblView]; 

Tất cả các khác làm việc tốt và đúng, tôi chỉ có vấn đề làm thế nào để thiết lập hình nền của ?

Trả lời

3

Sử dụng mã sau không được sử dụng UIImageView.

self.tblView.backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]]; 

Nếu không,

self.tblView.backgroundView.inputView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tblbg.png"]]; 

Thứ hai tùy chọn (Tùy chọn này hữu ích khi bạn không phụ thuộc trên UITableView Phong cách)

1) thay đổi UITableView Phong cách của bạn, style:UITableViewStylePlain.
2) Thêm #import <QuartzCore/QuartzCore.h> Khung
3) Thay đổi khung UITableView ví dụ như, CGRectMake(10, "asYouNeed", 300, "asYouNeed")
4) Cho bán kính tròn của bạn UITableView

self.tblView.layer.cornerRadius = 10; // set Radius as you need 

Và thiết UIImageView như BackGroundView của UITableView. (đang theo mà bạn đã putted trong Câu hỏi này)

bước trên này được tạo ra UITableView Với góc tròn. Tôi đề cập đến ở đây mã này được sử dụng khi bạn không phụ thuộc vào UITableView Kiểu, nếu TableView Style:Gropped là quan trọng đối với bạn thì tùy chọn này không giúp ích cho bạn.

Cảm ơn :)

4

Hãy thử điều này:

UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 277, 58)]; 
av.backgroundColor = [UIColor clearColor]; 
av.opaque = NO; 
av.image = [UIImage imageNamed:@"categorytab1.png"]; 
cell.backgroundView = av; 
+0

OP không muốn đặt nền của ô nhưng muốn đặt nền của TableView với kiểu được nhóm. bộ mã tưởng tượng của bạn cho mỗi ô của hàng. – iPatel

+0

Tôi không muốn đặt UIImageView làm nền của ô nhưng tôi muốn đặt làm nền của UITableView –

+1

Nhưng, bạn đã nói trong hình ảnh được thêm vào Bạn chỉ muốn hiển thị chế độ xem hình ảnh của mình trên các ô của chế độ xem bảng được nhóm. Và ở trên bình luận bạn nói rằng bạn muốn có nền cho TableView? Rõ ràng sự nhầm lẫn, đầu tiên. – viral

2

Đặt giao diện UITableView nền như nil để làm cho nó minh bạch.

[tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"backgroundImage.png"]]]; 
tableView.opaque = NO; 
tableView.backgroundView = nil; 

Hy vọng nó sẽ giúp bạn.

2

Bạn có muốn như thế này

enter image description here

Đây là mã: -

Setting xem nền của UITableView bất cứ nơi nào bạn muốn .Tôi đã thực hiện nó trong viewDidLoad.

[_tblView setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"url.jpg"]]]; 

Và thiết lập màu tableViewCellBackground để minh bạch trong cellForRowAtIndexPath

static NSString *[email protected]"cellIdentifier"; 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

if (cell ==nil) { 
    cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
} 
cell.backgroundColor=[UIColor clearColor]; 
[email protected]"goup styled"; 
return cell; 
3

Thứ nhất, một chút thông tin như thế nào bàn hoạt động:

  1. UITableView có nền. Đây là những gì bạn thấy đằng sau các tế bào của bạn.
  2. Mỗi ô có ba chế độ xem đặc biệt: contentView, backgroundView, selectedBackgroundView.
  3. backgroundView được hiển thị bên dưới nội dung của ô, khi ô được chọn, selectedBackgroundView được sử dụng thay thế.
  4. Thông thường, tất cả nội dung của bạn nên chuyển đến contentsView. Việc tách nền từ nội dung cho phép bảng hoạt động một cách thích hợp với quá trình chuyển đổi không được chọn/được chọn một cách thích hợp. Điều cũng quan trọng khi ô vào chế độ chỉnh sửa - nội dung bị thu nhỏ/di chuyển và các nút điều khiển chỉnh sửa (ví dụ: nút xóa hoặc lựa chọn ô) có thể được hiển thị độc lập trên nội dung.
  5. Ô cũng trực tiếp chứa chế độ xem dấu phân tách (thường có chiều cao 1 hoặc 2px ở dưới cùng của ô, tùy thuộc vào separatorStyle). Đó là lý do tại sao ô luôn cao hơn ít nhất 1 px là contentsView.

Thứ hai, một chút thông tin về cách thức hoạt động của bảng được nhóm.

  1. Bảng có nền mặc định đặc biệt. Bạn có thể xóa/thay đổi nó bằng cách sử dụng backgroundViewbackgroundColor.
  2. Các ô trong chế độ xem bảng được nhóm có kích thước nhỏ hơn contentView. Các tế bào vẫn có chiều rộng tương tự như toàn bộ bảng, nhưng contentView có một bù đắp ở bên trái và bên phải (khoảng 10 điểm trên iPhone).
  3. backgroundView được sửa đổi và bao gồm một lớp vẽ đường viền, tùy thuộc vào vị trí ô (khác nhau đối với ô đầu tiên, ô cuối và ô giữa). Đường viền có màu được chỉ định bởi separatorColor của bảng.

Mọi thứ đều có thể được sửa đổi trong mã của bạn!

Một trong những phương pháp đơn giản nhất để xóa đường viền là đặt separatorColor thành [UIColor clearColor]. Điều này sẽ loại bỏ các dải phân cách di động, nhưng bạn có thể thêm dấu phân cách riêng của bạn, ví dụ

cell = ... 
UIView* separator = [[UIView alloc] init]; 
separator.backgroundColor = ... 
separator.frame = CGRectMake(0.0f, table.bounds.size.width, table.rowHeight - 1.0f, 1.0f); 
separator.autoresizingMask = (UIViewAutoresizingMaskFlexibleTopMargin | UIViewAutoresizingMaskFlexibleWidth); 
[cell addSubview:separator]; //note we are adding it directly to the cell, not to contentsView 

Bạn cũng có thể sử dụng hình ảnh (UIImageView) cho phân cách, thay vì một cái nhìn đơn màu.

Phương pháp khác là đặt backgroundView thành nil cho mỗi ô.

Thực ra, bạn hoàn toàn có thể bỏ qua số contentsView và thêm mọi thứ vào ô trực tiếp. Sau đó, bạn có thể tùy chỉnh các phương thức ô sau để cập nhật ô của bạn khi trạng thái của nó thay đổi.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    //update the cell text colors, backgrounds etc for the selected/not selected state 
    //you don't have to call super 
    // (the default implementation changes between backgroundView and selectedBackgroundView) 
} 

- (void)setHighlighted:(BOOL)highlited animated:(BOOL)animated { 
    //update the cell text colors, backgrounds etc for the selected/not highlighted state 
    //you don't have to call super 
    // (the default implementation changes between backgroundView and selectedBackgroundView) 
    //by giving empty implementation, you will block highlighting of cells 
} 

- (void)setEditing:(BOOL)highlited animated:(BOOL)animated { 
    //you can use this method to add custom editing controls 
} 

- (void)willTransitionToState:(UITableViewCellStateMask)state { 
    //use this method to change the layout of your contents 
    //when the cells goes into one of the editing states 
} 

- (void)layoutSubviews { 
    //update the frames of cell contents to match the new cell size 
    //note that the cell doesn't have the correct size until it is added to the table, 
    //this method is called when the cell already has the final size 

    //you can also use this method to change the size/position of the `contentsView` 
} 

Edit: Để giải quyết vấn đề cụ thể của bạn, giải pháp tốt nhất có lẽ là:

  1. Tháo mặc định backgroundView từ bảng và suplement nền của riêng bạn (ví dụ như màu sắc rõ ràng, màu trắng, màu được tạo từ mẫu hoặc UIImageView đến backgroundView.
  2. Xóa mặc định backgroundView từ mọi ô và thay thế bằng UIImageView.Bạn cần ba thông số kỹ thuật hình ảnh ial cho các ô đầu tiên, cuối và giữa.
3

Nếu bạn muốn chắc UI tế bào tùy chỉnh của bạn sau đó Hãy thử với

_tblNews.backgroundColor = [UIColor clearColor]; 
     _tblNews.backgroundView = nil; 
     _tblNews.separatorColor = [UIColor clearColor]; 
     _tblNews.separatorStyle = UITableViewCellSeparatorStyleNone; 

Và tạo ngòi cho di động của bạn như bạn muốn chắc di động của bạn và tải di động rằng trong phương pháp nguồn dữ liệu của bạn.

cho xib tải

+ (id)loadNibNamed:(NSString *)NibName { 
    NSObject *cl = nil; 
    if (NSClassFromString(NibName) != nil) { 
     NSArray *arr = [[NSBundle mainBundle] loadNibNamed:NibName owner:self options:nil]; 
     for (id cls in arr) { 
      if([cls isKindOfClass:NSClassFromString(NibName)]) 
      { 
       cl = cls; 
       break; 
      } 
     } 
    } 
    return cl; 
} 

chắc chắn trong xib bạn thiết lập định danh cho việc tái sử dụng các tế bào. Sử dụng u đó có thể tùy chỉnh bố cục ô dễ dàng.

1

Vui lòng thử này,

UIView *backgroundView = [[UIView alloc] init]; 
[backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]]; 

và trong tableview, hãy đặt khách sạn này.

UITableView *tableView = [[UITableView alloc] init]; 
[tableView setBackgroundView:backgroundView]; 

Hy vọng điều này phù hợp với bạn.

Các vấn đề liên quan