我目前正在为swift中的练习制作一个演示iOS应用程序,但我遇到了一个问题。我刚刚创建了一个新页面,此页面上只有一个按钮。我已将按钮链接到IBAction功能,并显示正确的连接。
我会告诉你一个屏幕截图,但我没有足够的声誉(我曾经遇到的其他任何问题我都可以找到其他人的帖子。)
它甚至会显示带有填充点的圆圈,单击时会显示正确的按钮。在连接检查器中,它在发送的事件下显示" Touch Up Inside"和"用户页面btnProgressClick" (Userpage是我的类,它扩展了UIViewController并被这个微粒View Controller引用,而btnProgressClick是我想要运行的IBAction函数的名称。)
我找到了this post,我尝试了干净的构建,但是没有用。我也移动了我的按钮,它在模拟器中正确更新。
btnProgressClick中的代码永远不会执行。我在第一行放了一个断点,它没有断开。
这是" Main.storyboard"将按钮链接到函数的XML代码。
<!--User Page-->
<scene sceneID="aNb-aX-hZF">
<objects>
<viewController storyboardIdentifier="UserPage" id="w2h-zR-Kdu" customClass="UserPage" customModule="GenomeTrackerDemo" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="9dS-Hw-ZYg"/>
<viewControllerLayoutGuide type="bottom" id="7PS-pA-lFe"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="w6A-eT-aKv">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JGD-xx-tMQ">
<rect key="frame" x="20" y="48" width="46" height="30"/>
<state key="normal" title="Button"/>
<connections>
<action selector="btnProgressClick:" destination="w2h-zR-Kdu" eventType="touchUpInside" id="F1N-QY-fhb"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Fsq-L4-Are" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1043" y="426"/>
</scene>
这是UserPage类:
import Foundation
import UIKit
class UserPage: UIViewController {
var thisUser: User = User()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnProgressClick(sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle:nil)
let vc: progressPage = storyboard.instantiateViewControllerWithIdentifier("progressPage") as! progressPage
UIView.transitionFromView(self.view, toView: vc.view, duration: 0.8, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
}
}
正如我之前所说,这是我的第一个问题,所以我愿意接受有关措辞如何以及我提供的信息的反馈。
我想添加一些有关如何调用此页面的信息。在对Web服务进行异步调用之后调用它。成功恢复数据后,我转换到具有此功能的页面:
func afterSuccessfulLogin(thisUser: User){
dispatch_async(dispatch_get_main_queue()){
let storyboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UserPage = storyboard.instantiateViewControllerWithIdentifier("UserPage") as! UserPage
vc.thisUser = thisUser
UIView.setAnimationCurve(.EaseIn)
UIView.transitionFromView(self.view, toView: vc.view, duration: 1.2, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
}
}
不确定这是否会产生影响,但我想我会把它扔进那里。
对此问题的任何帮助都非常有用。
谢谢!
答案 0 :(得分:1)
[由于有问题的其他信息,删除了先前的答案]
iOS包含视图层次结构和视图控制器层次结构。这两者都需要保持一致。在问题中发布的代码中,仅处理视图层次结构。请尝试以下更改:
addChildViewController:
self
之前致电transitionFromView:toView:duration:options:completion:
上的vc
。在transitionFromView:toView:duration:options:completion:
方法的完成模块中,在didMoveToParentViewController:
上致电vc
,传递self
。
let storyboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UserPage = storyboard.instantiateViewControllerWithIdentifier("UserPage") as! UserPage
vc.thisUser = thisUser
UIView.setAnimationCurve(.EaseIn)
self.addChildViewController(vc)
UIView.transitionFromView(self.view, toView: vc.view, duration: 1.2, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: { (finished) -> Void in vc.didMoveToParentViewController(self) })
调用transitionFromView:toView:duration:options:completion:
并将self.view
作为fromView
参数传递也有点奇怪。 fromView
参数通常被删除并替换为toView
参数,这会使视图控制器层次结构中的原始视图控制器在视图层次结构中没有实际视图。引入您要替换的嵌套UIView
而不是self.view
可能是明智的。