2013-03-16 52 views
1

我正在開發一個包含最新SDK的iOS應用程序。使第三個可見行成爲唯一可選的

我有一個UITableView與很多行,但我只顯示五行。換句話說,用戶只能看到五行。他/她可以滾動表格,但只有五行可見。

我想使可選的第三行。用戶只能選擇第三個可見行。

我試圖首先模擬一個UIPickerView,因爲我使用核心數據,所有的代碼現在可以正常工作,UITableView委託,第二,我不知道如何自定義UIPickerView背景和選擇區域。

如何使第三個可見行成爲唯一可選行?

+0

可能還希望使行捕捉到第一個可見行的頂部。您可以使用ScrollView委託方法執行此操作。添加了一個示例顯示。 – 2013-03-17 01:16:34

回答

0

您可以使用數組[self.tableView indexPathsForVisibleRows]找出indexPaths可見。在willSelectRowAtIndexPath方法中返回nil,但是第三個元素除外。

爲了避免突出你也可以用它來設置

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

在CFRAIP方法。

1

實現-[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

1

完整示例以及捕捉到行:

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 
相關問題