我正在构建此应用并遇到以下问题。 (下面的图片)
我有2个视图控制器:A和B.视图控制器B通过addChildViewController嵌入到视图控制器A中。
视图控制器B是带有段控制器的表视图。 视图控制器B位于视图控制器A拥有的滚动视图内。
我想要的: 我希望所有子视图(滚动视图除外)始终保持静态。 由于tableview将有许多项目,我希望用户能够滚动它以展开它,如图所示。一旦它到达顶部,它不应该进一步滚动。相反,实际的tableview应该开始滚动。 我希望这是非常顺利的。当用户向上滑动手指时,整个视图控制器B应该开始上升;一旦到达顶部,滚动应立即转移到表格视图。 (希望有道理)
到目前为止我尝试了什么: 玩弄激活和停用视图控制器B中的tableview和视图控制器A中的滚动视图的shouldEnableScroll属性
非常感谢任何建议 提前致谢
http://s1318.photobucket.com/user/Jose_Bigio/media/photo-2_zpsfe1c7b1a.jpg.html
答案 0 :(得分:0)
尝试此方法。这是在swift
中完成的使用PanGesture拖动视图控件B'上和下。然后你不需要添加任何scrollview或直接使用UIView的
dragRecognizer = UIPanGestureRecognizer(target: self, action: "handleDrag:")
dragRecognizer.minimumNumberOfTouches = 1
dragRecognizer.maximumNumberOfTouches = 1
viewControllerB.addGestureRecognizer(dragRecognizer)
然后使用句柄拖动方法。将变量viewHeight声明为CGFloat,并为其指定一个值viewHeight = self.view.frame.size.height - viewControllerB.frame.origin.y
现在使用此viewHeight框架,增加tableview高度。一次并处理拖动方法,使其不会被拖动超过200(或viewController B的某个origin.y)而不是20以下。请参阅下面的方法。这不是100%的解决方案,但您可以根据自己的要求进行编辑。
func handleDrag(recognizer: UIPanGestureRecognizer) {
if (recognizer.state == UIGestureRecognizerState.Began) {
touchLocation = recognizer.translationInView(recognizer.view) //returns CGPoint.
println("Touch location: \(touchLocation)")
if (touchLocation.y == 0) && (touchLocation.x != 0) {
isVertical = false
}else {
isVertical = true
}
} else if (recognizer.state == UIGestureRecognizerState.Changed) {
translation = recognizer.translationInView(recognizer.view)
println("translation: \(translation)")
newLocation = CGPointMake(touchLocation.x, touchLocation.y + translation.y);
println("New location: \(newLocation)") // this is for vertical increase or decrease
var checkPos = CGPoint()
checkPos = CGPointMake(0, recognizer.view.frame.origin.y + newLocation.y)
println("Check Position: \(checkPos)") //
var diff = CGFloat()
if isVertical == true {
if (checkPos.y > 20 && checkPos.y < 200) {
newY = checkPos.y // newY is CGFloat and is used to define new origin of viewcontrollerB
}else{
if (checkPos.y < 85) {
newY = 85;
}else if (checkPos.y >= 200){
newY = 200
}
}
viewHeight = self.view.frame.size.height - newY;
println("viewHeight: \(viewHeight)")
recognizer.setTranslation(CGPointZero, inView: recognizer.view)
println("\(recognizer)")
viewControllerB.frame = CGRectMake(0, newY, 320, viewHeight)
table.frame = CGRectMake(0, viewControllerB.frame.origin.y + 40, 320, viewControllerB.frame.size.height - 40)
}else if isVertical == false {
println("Horizontal Swipe: \(isVertical)")
}
} else if (recognizer.state == UIGestureRecognizerState.Ended){
var velocity = CGPoint()
velocity = recognizer.velocityInView(recognizer.view)
println("Velocity : \(velocity)")
}
}
}
这可能会帮助您进一步提高您的发展。希望这会帮助你。如果已经解决,请忽略它。