scrollViewDidScroll从未调用过

问题描述 投票:15回答:2

我在View中有一个Scrollview。我想使用功能scrollViewDidScroll来检查和更新箭头(左至右)。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    NSLog(@"Did scroll");
    [self updateButtons];
}

当我向左或向右滚动时,似乎不会调用scrollViewDidScroll。我搜索了所有内容,但没有找到解决方案。

希望有人有解决方案。

objective-c cocoa-touch uiscrollview
2个回答
50
投票

典型的错误是“一个人不能简单地设置视图的委托”。您可能忘记的是

theScrollView.delegate = self;

25
投票

我也有这种“症状”,并因此失去了大约2个小时的生命。我显然已经正确设置了代理...但是我不知道在滚动视图上设置contentSize属性。 -.-

如果您未设置该属性,则滚动视图不会认为有任何滚动内容,因此不会触发预期的滚动视图方法。


0
投票

实际上在大多数情况下有帮助:

scrollView.delegate = self

但是!如果您有一个UITableViewUICollectionView的实例,并且几乎将某个实例分配为UITableViewDelegate / UICollectionViewDelegate,而您想使用的实例与UIScrollViewDelegate不同,请执行此操作(例如UITableView的示例) :

(taleView as UIScrollView).delegate = someDelegate

并确保someDelegate符合UIScrollViewDelegate协议。


我的意思的更详细的示例:

class MyScreenViewController: UIViewController {

    @IBOutlet weak var tableView: TableView!

    private let tvDelegate = MyScreenTableViewDelegate()

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = tvDelegate
        (tableView as UIScrollView).delegate = self
    }
}

extension MyScreenViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // invoke well and does not affect `UITableViewDelegate`
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.