2016-12-04 1 views
2

BarButtonItem을 두 번 탭하면 맨 위로 스크롤하고 싶습니다. stackOverflow에 대한 많은 답변을 보았지만 그 중 아무 것도 저에게 효과적이지 않았습니다. 아마도 내가 잘못 사용하고 있을까요? AppDelegate 또는 TableViewControllers에 코드를 어디에 넣어야합니까?이 기능을 특별히 추가하고 싶습니다.두 번 탭 막대 항목 위로 스크롤하려면

어쨌든 Swift 2.3 및 Xcode 8을 사용하고 있으며 도움을 받고 싶습니다.

감사합니다.

답변

0

scrollsToTop에 대해 알고 계십니까? 나는 그것이 당신이 필요로하는 것이라고 생각합니다. UIScrollViewscrollsToTop 속성에 관련 아이폰 OS SDK에서 설명 :

사용자가 상태 표시 줄 맨 위로 스크롤됩니다 상태 표시 줄에 가장 가까운 것입니다 터치 아래에 스크롤 뷰를 탭하지만

에만 scrollsToTop 속성을 경우 YES이면 대리자는 shouldScrollViewScrollToTop에서 NO를 반환하지 않으며 이미 맨 위에 있지 않습니다. // iPhone에서 화면상의 스크롤보기가 scrollsToTop == YES 인 경우에만이 제스처를 실행합니다. 둘 이상이 발견되면 아무 것도 스크롤되지 않습니다.

+0

네,이 답변을 여러 번 보았지만 항상 문제를 지적했습니다. 올바르게 작동하도록 올바르게 작성하는 방법을 보여줄 수 있습니까? –

+0

'scrollsToTop'는 기본적으로 true입니다 만,'UIScrollView'가 많거나 하위 클래스 인 경우, 필요한 뷰를 제외한 모든 객체에 대해'false'를 설정해야합니다. –

+0

'UIScrollView'가 가지고있는 것은'override func scrollViewWillBeginDragging scrollView : UIScrollView) { self.searchController.searchBar.resignFirstResponder ( self.searchController.searchBar.endEditing (true) } '이렇게하면 검색 할 때 키보드를 닫을 수 있습니다. –

0

처음에는 UITabBarControllerDelegate 대리인을 설정합니다. 대리인은 스토리 보드 또는 UITabBarController의 대리자 속성을 사용하여 코드를 통해 쉽게 설정할 수 있습니다.

myTabBar.delegate = myNewDelegate // Have to conform to UITabBarControllerDelegate protocol 

당신은 UITabBarController가 하위 클래스와 그 자체에 대한 위임이 될 수 있도록하기위한 UITabBarControllerDelegate을 구현할 수 있습니다.

mySubclassedTabBar.delegate = mySubclassedTabBar 

위임자가되면이 방법을 시도해 볼 수 있습니다.

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool 
{ 
    guard let tabBarControllers = tabBarController.viewControllers 
    else 
    { 
     // TabBar have no configured controllers 
     return true 
    } 

    if let newIndex = tabBarControllers.indexOf(viewController) where newIndex == tabBarController.selectedIndex 
    { 
     // Index won't change so we can scroll 

     guard let tableViewController = viewController as? UITableViewController // Or any other condition 
     else 
     { 
      // We are not in UITableViewController 
      return true 
     } 

     tableViewController.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) 
    } 

    return true 
} 
+0

TableViewController/ViewController에이 코드를 모두 추가하고 싶습니다. 또는 새로운 신속한 파일에서 내가 내 tabBarViewController에 연결하게 만들 것인가? –

+0

가장 쉬운 방법은 UITabBarController (대개 새로운 신속한 파일)를 하위 클래스로 만들고 대리자 프로토콜을 구현하고 스토리 보드 변경 tabBarController 클래스에 구현하는 것입니다. 그런 다음 스토리 보드 또는 코드 (예 : 초기화 중)에서 대리인 속성을 쉽게 변경할 수 있습니다. – Adamsor

관련 문제