2015-09-10 29 views
0

我被困在這一點,並沒有其它問題,以便幫助我......的UIScrollView不點觸手勢傳播到其子

我視圖控制器,它實現UIGestureRecognizerDelegate。有幾個視圖,其中一個是contentView,在contentView內部有一個UIScrollView。在該滾動視圖中,還有一個scrollContentView,它是簡單的UIView,但它包含更多的子視圖,這些子視圖因爲空間而沒有包含在代碼示例中。一切正常(經過很多時間),但它看起來像沒有挖掘手勢傳播投擲UIScrollView到子視圖..

我不使用故事板。

我嘗試了一切,任何幫助將不勝感激。

class MyController: PopoverController, UITableViewDelegate, UIGestureRecognizerDelegate 
{ 
    var scrollPane: UIScrollView! 

    var myContentView: UIView! 

    var bottomPane: EditOrderItemBottomPaneView! 


    var quantityPaneView: QuantityPaneView! 

    var optionsTable: OptionsTableView! 

    var modificationsTable: ModificationsTableView! 

    var specialPricingsTable: SpecialPricingsTableView! 


    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     categoriesModel = DIContainer.get().getCategoriesModel() 
     activeOrderModel = DIContainer.get().getActiveOrderModel() 
     modificationModel = DIContainer.get().getProductModificationsModel() 

     orderItem = popoverModel.get("orderItem") as! OrderItem! 
     let category: ProductCategory = categoriesModel.getCategoryById(orderItem.categoryId)! 

     titleLabel.text = category.name 

     // scroll view 
     scrollPane = UIScrollView() 
     scrollPane.translatesAutoresizingMaskIntoConstraints = false 
     scrollPane.delegate = self 
     contentView.addSubview(scrollPane) 

     // bottom pane 
     bottomPane = EditOrderItemBottomPaneView() 
     contentView.addSubview(bottomPane) 

     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView][bottomView]|", options: [], metrics: nil, views: ["scrollView": scrollPane, "bottomView": bottomPane])) 
     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: [], metrics: nil, views: ["scrollView": scrollPane])) 
     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[bottomView]|", options: [], metrics: nil, views: ["bottomView": bottomPane])) 

     // scroll content view 
     myContentView = UIView() 
     myContentView.translatesAutoresizingMaskIntoConstraints = false 
     scrollPane.addSubview(myContentView) 
     scrollPane.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[content]|", options: [], metrics: nil, views: ["content": myContentView])) 
     scrollPane.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[content]|", options: [], metrics: nil, views: ["content": myContentView])) 

     contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[content]|", options: [], metrics: nil, views: ["content": myContentView])) 
     contentView.addConstraint(NSLayoutConstraint(item: myContentView, attribute: NSLayoutAttribute.Trailing, 
       relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Trailing, 
       multiplier: 1, constant: 0)) 
     contentView.addConstraint(NSLayoutConstraint(item: myContentView, attribute: NSLayoutAttribute.Leading, 
       relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Leading, 
       multiplier: 1, constant: 0)) 

     // quantity pane 
     quantityPaneView = QuantityPaneView() 
     myContentView.addSubview(quantityPaneView) 

     // options table 
     let optionsDataSource: OrderItemOptionsTableViewDataSource = DIContainer.get().getOrderItemOptionsTableViewDataSource() 
     optionsDataSource.orderItem = orderItem 
     if optionsDataSource.getNumberOfOptions() > 0 { 
      optionsTable = OptionsTableView(delegate: DIContainer.get().getOrderItemOptionsTableViewDelegate(), 
        dataSource: optionsDataSource, orderItem: orderItem) 
      myContentView.addSubview(optionsTable) 
     } 

     // modifications table 
     modificationsTable = ModificationsTableView(
     delegate: DIContainer.get().getOrderItemModificationsTableViewDelegate(), 
       dataSource: DIContainer.get().getOrderItemModificationsTableViewDataSource(), 
       orderItem: orderItem) 
     myContentView.addSubview(modificationsTable) 

     // special pricing table 
     specialPricingsTable = SpecialPricingsTableView(
     delegate: DIContainer.get().getOrderItemSpecialPricingsTableViewDelegate(), 
       dataSource: DIContainer.get().getOrderItemSpecialPricingsTableViewDataSource(), 
       orderItem: orderItem) 
     myContentView.addSubview(specialPricingsTable) 

     var views = [ 
       "quantityPane": quantityPaneView, 
       "modifications": modificationsTable, 
       "specialPricings": specialPricingsTable 
     ] 

     myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-25-[quantityPane]-25-|", options: [], metrics: nil, views: views)) 
     myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-25-[modifications]-25-|", options: [], metrics: nil, views: views)) 
     myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-25-[specialPricings]-25-|", options: [], metrics: nil, views: views)) 

     if optionsDataSource.getNumberOfOptions() > 0 { 
      views["options"] = optionsTable 
      myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-25-[options]-25-|", options: [], metrics: nil, views: views)) 
      myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[quantityPane]-25-[options]-25-[modifications]-25-[specialPricings]", options: [], metrics: nil, views: views)) 
     } 
     else { 
      myContentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[quantityPane]-25-[modifications]-25-[specialPricings]", options: [], metrics: nil, views: views)) 
     } 
    } 

    override func viewDidLayoutSubviews() 
    { 
     super.viewDidLayoutSubviews() 

     var h: CGFloat = 0.0 
     for view: UIView in myContentView.subviews { 
      h += view.frame.size.height; 
     } 

     scrollPane.contentSize = CGSizeMake(myContentView.frame.size.width, h) 
    } 

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    { 
     return true 
    } 

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool 
    { 
     if touch.view != scrollPane { 
      return false 
     } 

     return true 
    } 
} 
+0

我想你忘記添加** ** uigesturerecognizerdelegate添加和嘗試一次代表將來電或不 –

+0

我已經實施了委託協議,但方法不叫 – trubi

+0

你能展現更新的代碼 –

回答

0

我意識到整個屏幕的設計非常糟糕。我沒有解決問題,但我重新實現了整個控制器。我仍然認爲有可能解決這個問題,但有更簡單的方法。

重點是,我有更多的表格視圖內滾動內容視圖。但是,當然,可以創建一個包含更多部分的表格。這樣做的副作用是,一個表視圖本身是可滾動的,所以不需要使用自定義的UIScrollView。

因此,對於每個以iOS開發爲開端的人來說,儘可能使用更多節的UITableView。

0

實現UIGestureRecognizer委託方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (touch.view != yourScrollView) { 
     return NO; 
    } 
    return YES; 
} 
+0

好吧,它仍然無法正常工作。 ..我在這個方法中有斷點,它不被調用。任何建議?你想讓我提供一些更詳細的信息嗎?順便說一句,你從哪裏得到這些信息?你能指點我一些資源嗎?非常感謝你 – trubi