在我的例子中,我使用NSString作爲我的數據,將被顯示在詳細視圖控制器中。隨意改變,以適合您的需求。好了,所以在這裏我們去:
首先聲明的協議在DetailViewController像這樣:
@class DetailViewController;
@protocol DetailViewControllerDelegate <NSObject>
- (void)swipeToNextCell:(DetailViewController *)sender;
- (void)swipeToPreviousCell:(DetailViewController *)sender;
@end
@interface DetailViewController : UIViewController
@property(weak, nonatomic) id<DetailViewControllerDelegate> delegate;
@property(copy, nonatomic) NSString *data;
@property(weak, nonatomic) IBOutlet UILabel *label;
@end
接下來的事情就是在DetailViewController添加UISwipeGestureRecognizers檢查手勢:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UISwipeGestureRecognizer *leftGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDetectedLeft:)];
leftGesture.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:leftGesture];
UISwipeGestureRecognizer *rightGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDetectedRight:)];
rightGesture.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:rightGesture];
}
實現viewWillAppear中來當您推送您的DetailViewController時顯示您的數據:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.label.text = self.data;
}
不要忘了執行將由GestureRecognizers調用的方法:
- (void)swipeDetectedRight:(UISwipeGestureRecognizer *)sender
{
NSLog(@"Right Swipe");
[self.delegate swipeToNextCell:self];
self.label.text = self.data;
}
- (void)swipeDetectedLeft:(UISwipeGestureRecognizer *)sender
{
NSLog(@"Left Swipe");
[self.delegate swipeToPreviousCell:self];
self.label.text = self.data;
}
和多數民衆都在您的詳細信息視圖所需要的。現在轉到TableViewController。你TableViewController應實現DetailViewControllerDelegate協議:
@interface CustomTableViewController : UITableViewController <DetailViewControllerDelegate>
@property(strong, nonatomic) DetailViewController *detailViewController;
@property(assign, nonatomic) NSInteger currentRow;
@end
這裏是我的detailViewController @property吸氣:
- (DetailViewController *)detailViewController
{
if (_detailViewController == nil)
{
_detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
_detailViewController.delegate = self;
}
return _detailViewController;
}
這裏是我如何管理行選擇:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *viewController = self.detailViewController;
viewController.data = [NSString stringWithFormat:@"Cell: %d", indexPath.row];
viewController.title = @"Detail";
self.currentRow = indexPath.row;
[self.navigationController pushViewController:viewController animated:YES];
}
你的最後一件事要做的是實現協議的方法:
- (void)swipeToNextCell:(DetailViewController *)sender
{
// Get data for next row
sender.data = [NSString stringWithFormat:@"Cell: %d", ++self.currentRow];
}
- (void)swipeToPreviousCell:(DetailViewController *)sender
{
// Get data for next row
sender.data = [NSString stringWithFormat:@"Cell: %d", --self.currentRow];
}
我在模擬器上測試過,工作正常。這很簡單,因爲我的數據模型非常簡單 - 它只是NSString。沒有檢查部分是否有任何行,所以你必須自己弄清楚。但整個代表團模式應該是一樣的。
祝你好運!
你能幫我在這個問題:[鏈接](http://stackoverflow.com/questions/11513706/access-uitableview-cell-and-swipe-between-them-from-detailview-using-xcode-4)我是初學者,需要一些關於這個主題的幫助。 – ingenspor 2012-07-17 10:21:21