2016-03-11 11:12:27 baixiaozhe 阅读数 6738

原:http://www.woowen.com/swift/2014/10/04/swift%20条件判断页面跳转/


在swift中作跳转是一件很简单得事情,可是如果右键某个空间拖动然后选择modal来关联跳转关系的话该如何做出代码判断呢?

场景:如果我想做一个登录页面,输入用户名密码之后点击登录按钮,验证成功就跳转这个功能呢?否则不跳转

  • 1.切换到storyboard,选中第一个直到如图显示初始图片
  • 2.右键第一个storyboard,拖动到你需要跳转的另一个storyboard如图step2

  • 3.在弹出如图的提示中选择modal表示跳转页面完全覆盖第一个页面

    step3

  • 4.选中Segue,

    step4

  • 5.查看右侧的Attributes inspector如图,在Identifier中写上一个自定义名称(如:login)

    step5

  • 6.在你的ViewController中加上下面得代码

    @IBAction func LoginBtn(sender: AnyObject) {
        self.performSegueWithIdentifier("login", sender: self)
    }    

LoginBtn是某个button空间得绑定点击动作,里面是跳转代码,表示你在点击这个按钮的时候会执行这个跳转动作,里面得Login名称请和第5步中自定义名称保持一致,如果你想在跳转前做一些判断的话就可以在这个语句前面加一些判断语句例如:

/**按钮点击事件*/
@IBAction func LoginBtn(sender: AnyObject) {
    /**登陆验证成功**/
    if tempResult == 1001{
        /**进行跳转**/
        self.performSegueWithIdentifier("login", sender: self)
    }else{
        println("login fail")
    }
}

2016-12-15 12:01:00 wei_chong_chong 阅读数 3310

swift2.x,  xcode7.1

有人会问现在swift4.0都粗来了,为啥还用swift2.x? 原因是:之前的项目使用的是Swift2.X编写的。如过升级xcode 使用swift3.0或者swift4.0,程序修改量很大。而且像我这种初级水平并没有把握保证程序的质量。保守起见还是先不升级xcode 暂时还是使用swit2.x编写吧。最重要的是公司没有预留时间修改。

关于页面跳转,网上有很多博客。但是你会发现好多不能用?其实是没有讲解清楚。

关于页面跳转有两种方式:

需要注意的是这两种方式的使用场景是不一样的!

区别是:一种是使用代码手写界面,另一种是使用Storyboard

第一种(手写界面)

var vc MyViewController()
self.presentViewController(vcanimatedtruecompletionnil)

第二种(storyboard制作的界面)

storyboard制作的界面跳转方式又分为两种

1、通过在storyboard中拉button控件建立segue跳转,连线跳转(这种比较简单我就不讲解了)

2、通过代码进行界面跳转。

(1)使用presentViewController跳转

var sb = UIStoryboard(name: "Main", bundle:nil)  
var vc = sb.instantiateViewControllerWithIdentifier("VC") as ViewController
//VC为该界面storyboardID,Main.storyboard中选中该界面View,Identifier inspector中修改
self.presentViewController(vc, animated: true, completion: nil)

关闭当前界面:
   //前提:通过 View的presentViewController跳转的页面才能执行,否则找不到上一页
   //同样可以执行关闭此页时的闭包操作
   self.dismissViewControllerAnimated(true, completion: nil)
(2)使用pushViewController跳转

如果父控件在NavigationController中也可以使用下面的方式跳转:

self.navigationController?.pushViewController(vc, animated: true)

使用这种方式跳转关闭的时候也是有固定方式的例如:返回到根视图

self.navigationController?.popToRootViewControllerAnimated(true)





参考:

http://www.jianshu.com/p/f69e8a5ae4f9


http://blog.csdn.net/tpian928/article/details/43115253

http://www.cnblogs.com/amourjun/p/amourjun.html

http://www.jianshu.com/p/bad9b3823260

http://www.woowen.com/swift/2014/10/04/swift%20%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD%E9%A1%B5%E9%9D%A2%E8%B7%B3%E8%BD%AC/

2016-11-23 14:40:14 sinat_29789455 阅读数 829
swift语言页面跳转方式:

 push  let secongViewController : SecondViewController = SecondViewController ()

       secongViewController.modalTransitionStyle = .coverVertical;

//        case coverVertical 新场景从下向上移动,逐渐覆盖旧场景

//        

//        case flipHorizontal 视图水平翻转,以显示背面的新场景

//        

//        case crossDissolve 旧场景淡出,新场景淡入

//        

//        @available(iOS 3.2, *)

//        case partialCurl 旧场景像书页一样翻开,显示下面的新场景


        self.present(secongViewController, animated: true, completion: nil)//跳转到下一个页面

 

        pop   self.dismiss(animated: true, completion: nil)//返回上一页面





2016-08-29 15:42:56 walkerwqp 阅读数 4836

1.简单方式

首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法。

1、通过在storyboard中拉button控件建立segue跳转。

2、通过presentViewController方法进行界面跳转。

这里需要注意presentViewController方法适用于xib与storyboard两种方法,但是当使用storyboard直接调用该方法时,ios模拟器会转入一个黑屏界面,程序不会报错。

主要原因是storyboard制作页面和手写页面,需要使用两种不同的方法来进行页面跳转。

 

对于storyboard制作页面:

1
2
3
var sb = UIStoryboard(name: "Main", bundle:nil)
var vc = sb.instantiateViewControllerWithIdentifier("myViewController") as MyViewController
self.presentViewController(vc, animated: true, completion: nil)

 

对于手写页面:

1
2
var vc = MyViewController()
self.presentViewController(vc, animated: true, completion: nil)

 

seuge跳转除了连线方式还有另外一种方法:

1
performSegueWithIdentifier("SecondSegue", sender: self)

其中利用sugue传值代码如下:

1
2
3
4
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var des = segue.destinationViewController as! ViewController
    des.label = textF
}

 

2.利用协议protocol进行传值

 协议protocol指的是在类之间制定一套规定进行委托执行,一个类可以通过协议委托另外一个类执行方法

protocol正向传值

写好协议:

1
2
3
4
protocol ParamsProtocol{
    //协议中得方法不能有结构体
    func returnParams(tmpStr: String)
}

ViewController:

1
2
3
4
5
6
7
8
var paramsProtocolDelegate: ParamsProtocol?
     
    //定义一个方法给协议中得方法赋值
    //在viewController中实现方法,这样在btn1,btn2中就可以不用实现,帮他们2个实现了.这就是代理.
    func start(){
        self.tmpString = "通过delegate进行的值传递方式2"
        self.paramsProtocolDelegate?.returnParams(self.tmpString)
    }

在NextViewcontroller中:

1
2
3
4
5
6
7
8
9
10
11
12
13
//遵守协议必须重新实现一下协议中得方法
func returnParams(tmpStr: String) {
    self.text2.text = tmpStr
}
override func viewDidLoad() {
 
    super.viewDidLoad()
    obj.paramsProtocolDelegate = self
    obj.start()
     
    // Do any additional setup after loading the view, typically from a nib.
}

  

4.利用NSUserDefaults进行传值

NSUserDefaults能实现小容量的数据存储功能,常用于用户名密码保留等功能上,也可以用来传值。

创建一个工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Foundation
//工具类,放置一些经常用到的方法
//通过userDefault存储数据
class baseClass{
     
    func cacheSetString(key: String,value: String){
        let userInfo = NSUserDefaults()
        userInfo.setValue(value, forKey: key)
    }
     
    func cacheGetString(key: String) -> String{
        let userInfo = NSUserDefaults()
        let tmpSign = userInfo.stringForKey(key)
        return tmpSign!
    }
}

ViewController:

1
2
3
4
5
6
7
var base: baseClass = baseClass()
 
   }
   @IBAction func btn3Click(sender: AnyObject) {
       self.base.cacheSetString("sign", value: "通过NSUserDefaults传递方式3")
       self.performSegueWithIdentifier("btn3", sender: self)       
   }

NextViewController:

1
2
3
4
5
6
7
8
9
10
11
@IBOutlet weak var text3: UITextField!
var base: baseClass = baseClass()
var sign:String = String()
override func viewDidLoad() {
     
    super.viewDidLoad()
    self.sign = base.cacheGetString("sign")
    text3.text = self.sign
     
    // Do any additional setup after loading the view, typically from a nib.
}

  

 


 

 

补充两种:

4. 利用 self.storyboard

 

利用 self.storyboard 方法, 就不需要进行 连线, 一样可以进行视图之间的跳转. 但是必须要设置 Storyboard ID.

 

然后利用 如下方法进行 跳转 和 传值

 

1
2
3
var thirdVC = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as ThirdViewController
thirdVC.text = "Pass"
self.navigationController?.pushViewController(thirdVC, animated: true)

  

 

因为是在 同一个 Storyboard 里面进行跳转, 所以 self.storyboard 就可以满足需求.

 

不明白? 看最后一个方法:

 

5. 利用 UIStoryboard

 

XIB 方法, 我们需要 用到 nibName, 同样 如果我们想要 分离多个 sence 在不同的Storyboard 里面, 怎么办?

 

这个时候, 就不能使用 self.storyboard 了.

 

而是:

 

1
2
3
4
var storyboard = UIStoryboard(name: "New", bundle: nil)
var newVC = storyboard.instantiateViewControllerWithIdentifier("NewViewController") as NewViewController
newVC.text = "Pass"
self.navigationController?.pushViewController(newVC, animated: true)

  

是不是 和 XIB 有异曲同工的感觉, 这样就可以把 Storyboard 分几个, 每个里面放几个 Sence.

 

这样的好处就是, 当你需要做多个不同功能的模块的应用, 分离到不同的 Storyboard 中, 彼此互不影响.

 

相对于 XIB 来说, 每个文件夹 只需要 1 个 Storyboard 文件, 和 Swfit 文件就可以了.

没有更多推荐了,返回首页