我正在開發一個包含最新SDK的iOS應用程序。使第三個可見行成爲唯一可選的
我有一個UITableView
與很多行,但我只顯示五行。換句話說,用戶只能看到五行。他/她可以滾動表格,但只有五行可見。
我想使可選的第三行。用戶只能選擇第三個可見行。
我試圖首先模擬一個UIPickerView
,因爲我使用核心數據,所有的代碼現在可以正常工作,UITableView
委託,第二,我不知道如何自定義UIPickerView
背景和選擇區域。
如何使第三個可見行成爲唯一可選行?
我正在開發一個包含最新SDK的iOS應用程序。使第三個可見行成爲唯一可選的
我有一個UITableView
與很多行,但我只顯示五行。換句話說,用戶只能看到五行。他/她可以滾動表格,但只有五行可見。
我想使可選的第三行。用戶只能選擇第三個可見行。
我試圖首先模擬一個UIPickerView
,因爲我使用核心數據,所有的代碼現在可以正常工作,UITableView
委託,第二,我不知道如何自定義UIPickerView
背景和選擇區域。
如何使第三個可見行成爲唯一可選行?
您可以使用數組[self.tableView indexPathsForVisibleRows]
找出indexPaths
可見。在willSelectRowAtIndexPath
方法中返回nil
,但是第三個元素除外。
爲了避免突出你也可以用它來設置
cell.selectionStyle = UITableViewCellSelectionStyleNone;
在CFRAIP方法。
實現-[id<UITableViewDelegate> tableView:willSelectRowAtIndexPath:]
是這樣的:(通過實施滾動型代表)
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray *indexPaths = [tableView indexPathsForVisibleRows];
if ([indexPaths objectAtIndex:2] isEqual:indexPath) {
return indexPath;
} else {
return nil;
}
}
更多信息here
完整示例以及捕捉到行:
ViewController.h:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
@end
ViewController.m:
#import "ViewController.h"
static int kRowHeight = 92;
static int kArrayCount = 20;
@interface ViewController()
@property (nonatomic, strong) NSMutableArray *tableViewData;
@end
@implementation ViewController
-(void)populateArray {
for (int i=0; i<kArrayCount; i++) {
[self.tableViewData addObject:[NSString stringWithFormat:@"String # %d",i]];
}
[self.myTableView reloadData];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [self.tableViewData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = [self.tableViewData objectAtIndex:indexPath.row];
// Configure the cell...
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
// Standard UIAlert Syntax
UIAlertView *myAlert = [[UIAlertView alloc]
initWithTitle:@"Selected"
message:[NSString stringWithFormat:@"Selected Row %d", indexPath.row]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[myAlert show];
}
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray *indexPaths = [tableView indexPathsForVisibleRows];
if ([[indexPaths objectAtIndex:2] isEqual:indexPath]) {
return indexPath;
} else {
return nil;
}
}
#pragma mark - ScrollView Delegate Methods (Make rows snap to position top)
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
int cellHeight = kRowHeight;
*targetContentOffset = CGPointMake(targetContentOffset->x,
targetContentOffset->y - (((int)targetContentOffset->y) % cellHeight));
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableViewData = [[NSMutableArray alloc] initWithCapacity:kArrayCount];
[self populateArray];
// Do any additional setup after loading the view, typically from a nib.
}
@end
可能還希望使行捕捉到第一個可見行的頂部。您可以使用ScrollView委託方法執行此操作。添加了一個示例顯示。 – 2013-03-17 01:16:34