iphone 使uitableview網格化

來源:互聯網
上載者:User

UITableView is probably the most used view on the iPhone. It’s flexible and the UI is ideally suited to use on the iPhone. There are lots of examples on how to add multiple items to a UITableViewCell. However, I
needed to present some data in a more traditional spreadsheet style grid. The results worked well and enabled me to pack a lot of information on the screen that was very hard to follow without the vertical grid. I’ll show a very simplified version here you
can use to add vertical lines to your UITableView.

First we need to create a subclass of UITableViewCell. This is so we can override drawrect and draw our lines and to add an array to hold a list of positions where we’ll draw the lines.

@interface MyTableCell : UITableViewCell {NSMutableArray *columns;}- (void)addColumn:(CGFloat)position;@end

In this simplified example we’ll leave the positioning of the actual text in the cells in the UITableViewController and place it manually (full source code is attached at the end). We’re just providing a mechanism for drawing vertical
lines to make a grid. Column locations are added by calling addColumn:

- (void)addColumn:(CGFloat)position {[columns addObject:[NSNumber numberWithFloat:position]];}

Now lets override drawRect. In it we grab the current graphics context and set the line color and width. Then we iterate over our columns array drawing a line from the top of the cell row to the bottom at each position stored in
the array.

- (void)drawRect:(CGRect)rect {CGContextRef ctx = UIGraphicsGetCurrentContext();// Use the same color and width as the default cell separator for nowCGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);CGContextSetLineWidth(ctx, 0.25);for (int i = 0; i < [columns count]; i++) {CGFloat f = [((NSNumber*) [columns objectAtIndex:i]) floatValue];CGContextMoveToPoint(ctx, f, 0);CGContextAddLineToPoint(ctx, f, self.bounds.size.height);}CGContextStrokePath(ctx);[super drawRect:rect];}

To add columns to the view just call

[cell addColumn:50];

when you’re building each cell.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];if (cell == nil) {cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];UILabel *label = [[[UILabelalloc] initWithFrame:CGRectMake(0.0, 0, 30.0,tableView.rowHeight)] autorelease];[cell addColumn:50];label.tag = LABEL_TAG;label.font = [UIFont systemFontOfSize:12.0];label.text = [NSString stringWithFormat:@"%d", indexPath.row];label.textAlignment = UITextAlignmentRight;label.textColor = [UIColor blueColor];label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleHeight;[cell.contentView addSubview:label]; label =  [[[UILabelalloc] initWithFrame:CGRectMake(60.0, 0, 30.0,tableView.rowHeight)] autorelease];[cell addColumn:120];label.tag = VALUE_TAG;label.font = [UIFont systemFontOfSize:12.0];// add some silly valuelabel.text = [NSString stringWithFormat:@"%d", indexPath.row * 4];label.textAlignment = UITextAlignmentRight;label.textColor = [UIColor blueColor];label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleHeight;[cell.contentView addSubview:label];}return cell;}

That’s it. Being a bit dense I beat my head on my desk a few days before it become obvious how blindingly simple it really was. A lot was just learning ObjectiveC and how UIKit works in general. I’m now working on a GridTableView
library that will add a good bit of functionality and ease of use. I’ll post it here.

轉自:http://www.iphonedevx.com/?p=153

源碼:GridsTableView

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.