Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-俯卧撑时停止控制_Ios_Uitableview_Gesture_Uipangesturerecognizer_Uirefreshcontrol - Fatal编程技术网

iOS-俯卧撑时停止控制

iOS-俯卧撑时停止控制,ios,uitableview,gesture,uipangesturerecognizer,uirefreshcontrol,Ios,Uitableview,Gesture,Uipangesturerecognizer,Uirefreshcontrol,我最近实现了UIRefreshControl以在下拉时从iCloud加载数据,但是,我发现当用户要求停止刷新时,将UITableView推回是很直观的。如果不使用uipangestureerecognizer,我想不出如何检测到这一点,它会删除我的UITableView的功能 在刷新过程中,是否有任何方法可以检测到在不删除现有tableview功能的情况下,将UITableView进行备份?谢谢。在这种情况下,我要做的是利用UITableViewDelegate符合UIScrollViewDel

我最近实现了
UIRefreshControl
以在下拉时从iCloud加载数据,但是,我发现当用户要求停止刷新时,将
UITableView
推回是很直观的。如果不使用
uipangestureerecognizer
,我想不出如何检测到这一点,它会删除我的
UITableView
的功能


在刷新过程中,是否有任何方法可以检测到在不删除现有tableview功能的情况下,将
UITableView
进行备份?谢谢。

在这种情况下,我要做的是利用UITableViewDelegate符合UIScrollViewDelegate这一事实。这样,您就可以确定tableView上何时发生不同的滚动事件。如果您是UITableViewController的子类,那么您已经符合UITableViewDelegate,因此在这方面都很好

我做的第一件事是为contentOffset设置一个属性,以便在开始拖动时记录它

@property (nonatomic, strong) NSNumber *contentOffsetAtStartOfDragging;
我之所以选择将其设置为NSNumber,而不是说CGFloat,这似乎更自然,是因为我不希望该属性在不需要的情况下仍然具有某些值。当那个属性对我不再有用时,我希望它为零。不过这只是我的设计选择,不会有什么区别

无论如何,我这样做的方式是在拖动开始时记录contentOffset,然后在拖动结束时将其与contentOffset进行比较。也就是说,我知道如果用户滚动到的contentOffset低于拖动开始时的值,我可以结束刷新

同样,当拖动完成时,出于上述原因,我将属性设置为nil

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    if ([self.refreshControl isRefreshing]) {
        self.contentOffsetAtStartOfDragging = [NSNumber numberWithFloat:scrollView.contentOffset.y];
    }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if ([self.refreshControl isRefreshing] &&
        scrollView.contentOffset.y > [self.contentOffsetAtStartOfDragging floatValue])
    {
        [self.refreshControl endRefreshing];
    }

    self.contentOffsetAtStartOfDragging = nil;
}

希望这是有帮助的。如果对你有用,请告诉我。

谢谢。我用了你建议的一部分,效果很好。我只跟踪拖动的结束,如果刷新发生,我会检查滑动的程度,如果足够低,我会停止刷新。这是密码<代码>-(void)ScrollViewDiEndDraging:(UIScrollView*)scrollView将减速:(BOOL)减速{if([refreshNotes isRefreshing]&&scrollView.contentOffset.y+scrollView.frame.origin.y>=0){[refreshNotes endRefreshing];}是的,当然也可以。唯一的区别是,现在用户必须一直向上滑动才能停止刷新。我想这两种方法都有利弊。使用我的方式,用户不必一直滚动,但他们可能会无意中触发它。按照您的方式,用户必须付出更多的努力,但这几乎总是有意的。我想这是你必须做出的设计选择。