我正在尝试使用水平滚动实现uitableview
。我采用了scrollview并在scrollview上添加了tableview。我设置scrollview的内容大小大于帧大小。这样它就可以水平滚动。但是当我在uitableview上添加了滑动手势时,它没有执行操作。
代码段在这里
leftswipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeRecognizer:)];
leftswipe.delegate = self;
leftswipe.direction = UISwipeGestureRecognizerDirectionLeft;
rightswipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeRecognizer:)];
rightswipe.delegate = self;
rightswipe.direction = UISwipeGestureRecognizerDirectionRight;
- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender
{
if ( sender.direction == UISwipeGestureRecognizerDirectionLeft )
{
NSLog(@" *** SWIPE LEFT ***");
index1++;
self.tableHeaderLabel.text = [self.categoriesLabelArray objectAtIndex:index1];
[self.feedsTableView reloadData];
}
if ( sender.direction == UISwipeGestureRecognizerDirectionRight ){
NSLog(@" *** SWIPE RIGHT ***");
index1--;
self.tableHeaderLabel.text = [self.categoriesLabelArray objectAtIndex:index1];
[self.feedsTableView reloadData];
}
}
我想在向左或向右滑动时重新加载表格。 但是现在它没有用。
答案 0 :(得分:1)
如果你在scrollView中添加tableView,你的gestureRecognizer可能会被scrollView的gestureRecognizer覆盖。
您可以尝试在
中实现代码CGFloat lastOffset_x = 0;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat currentOffSet_x = scrollView.contentOffSet.x;
if(lastOffset_x > currentOffSet_x){
//direction left
}else{
//direction right
}
lastOffset_x = scrollView.contentOffSet.x;
}
并自己跟踪滚动方向。
ps:记得将scrollView的contentSize调整为tableView.frame.size.width*numberOfYourTableView
。
答案 1 :(得分:1)
尝试添加UITableView委托方法:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
顺便说一句,您可以通过设置direction
属性来实例化一个UIGestureRecognizer:
- (void)viewDidLoad
{
[super viewDidLoad];
UIGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognizer:)];
recognizer.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft;
[tableView addGestureRecognizer:recognizer];
}
答案 2 :(得分:0)
当我需要显示水平表视图时,我只使用:
-(void)setupProductsTableView {
self.innerProductsTable.transform = CGAffineTransformMakeRotation(-M_PI_2);
self.innerProductsTable.delegate = self;
self.innerProductsTable.dataSource = self;
}
如果我需要跟踪滚动,请使用:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
int lastVisibleCell = [[[tableView indexPathsForVisibleRows] lastObject ] row];
//do some with last displayed cell
}
此致 Venelin
答案 3 :(得分:0)
在SwipeRecognizer中仅编写以下代码。
- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender
{
if ( sender.direction == UISwipeGestureRecognizerDirectionLeft )
{
NSLog(@" *** SWIPE LEFT ***");
index1++;
[self.feedsTableView reloadData];
}
if ( sender.direction == UISwipeGestureRecognizerDirectionRight ){
NSLog(@" *** SWIPE RIGHT ***");
index1--;
[self.feedsTableView reloadData];
}
}
并编写tableview委托方法(对于Data),如下所示:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [self.categoriesLabelArray objectAtIndex:index1];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(index1 == 0)
//set tableCellDataArray
if(index1 == 1)
//set tableCellDataArray
if(index1 == 2)
//set tableCellDataArray
//...
//...
if(index1 == n)
//set tableCellDataArray
}
是的,不要忘记将以下内容添加到viewDidLoad方法
- (void)viewDidLoad
{
leftswipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeRecognizer:)];
leftswipe.delegate = self;
leftswipe.direction = UISwipeGestureRecognizerDirectionLeft;
rightswipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(SwipeRecognizer:)];
rightswipe.delegate = self;
rightswipe.direction = UISwipeGestureRecognizerDirectionRight;
[self.feedsTableView addGestureRecognizer: leftswipe];
[self.feedsTableView addGestureRecognizer: rightswipe];
}
答案 4 :(得分:0)
如果您的要求是在tableview中显示内容(只有1行和水平滚动),最好的方法是转换tableview。这将解决你不需要采取scrollview的所有事情。
如果要求是其他情况......请详细说明您的要求。所以我们可以有一个解决方案。
答案 5 :(得分:0)
只需使用UICollectionView
!
将流式布局的scrollDirection
属性更改为UICollectionViewScrollDirectionHorizontal
。
[yourFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];