如何将两个参数传递给下一个ViewController?

时间:2014-10-28 09:44:26

标签: ios iphone uitableview swift

这是我的情况。我正在使用NSTimer,它计数15秒,但我也有按钮,我用它来提前停止这个计时器。更多这个按钮将我带到下一个tableViewController。第二个参数是日期 - 中欧的当前时间。如果我单击一个按钮,我需要移动到下一个TableViewController,并将这两个参数放到TableViewController中。这是我的代码:

**FirstViewController:**

    import UIKit

    class FirstViewController: UIViewController {

        var timer = NSTimer()
        @IBOutlet weak var labelCounter: UILabel!


            override func viewDidLoad() {
                super.viewDidLoad()
                timer = NSTimer.scheduledTimerWithTimeInterval(1,target:self, selector: Selector("update"),userInfo: nil, repeats :true)
            }

            func update(){

                    timer.invalidate()
             }

            override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
        if (segue.identifier == "segueTest") {
            var transfer = segue!.destinationViewController as SecondViewController
            transfer.toPass = labelCounter.text
            transfer.toPass2 = "\(NSDate())"
        }

    }

            @IBAction func buttonPressed(button: UIButton){

                if labelCounter.text > "0" {

                   timer.invalidate()

                }


SecondViewController:
import UIKit

class ThirdViewController: UIViewController {


    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!

    var toPass: String!
    var toPass2: String!


    override func viewDidLoad() {
        super.viewDidLoad()
    label1.text = toPass2
    label2.text = toPass
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

这段代码工作得很好:)在storyboard中我必须连接firstViewController和SecondViewController。我通过将我的按钮与secondViewController连接并将segue标识符设置为“segueTest”来实现这一点

4 个答案:

答案 0 :(得分:2)

我不知道它对你有用还是没有用

BViewControl.h

    @interface Showdeals : UIViewController
    {
        NSString *TotalJSonString;
        NSString *PassingString;
        NSMutablearray *setarray;
   }
   @property (strong,nonatomic)NSString *TotalJSonString;
   @property (strong,nonatomic)NSString *PassingString;

BViewControl.m

- (void)viewDidLoad
{
 [setarray addObject:TotalJSonString];
 [setarray addObject:PassingString];
}

最后你将setarray传递给UITableView

AViewControl.m 按钮操作

BViewControl *show=[[BViewControl alloc]initWithNibName:nil bundle:nil];
    [show setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    show.TotalJSonString=string1;
    show.PassingString=string2;

    [self.navigationController popToRootViewControllerAnimated:TRUE];
    [self presentViewController:show animated:YES completion:NULL ];

答案 1 :(得分:0)

在secondview控制器中创建属性。并使用类对象将值从当前视图控制器分配给secondview控制器属性。

答案 2 :(得分:0)

覆盖prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.

    //CHECK SEGUE IDENTIFIER HERE IF YOU HAVE MULTIPLE SEGUES
    (segue.destinationViewController as MyViewController).property = value // you can repeat this for any number of properties in your destination view controller
}

答案 3 :(得分:0)

你应该确实使用prepareForSegue。这是代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if ([segue.destinationViewController respondsToSelector:@selector(setMyData:)]) {
    [segue.destinationViewController performSelector:@selector(setMyData:) 
                                          withObject:myData];
    } 
}

在目标ViewController中,你应该有

@property (nonatomic, strong) MyData *myData;

如果要传递多个值,可以使用这两个值创建一个对象,然后将对象作为数据传递。

或者,您可以创建一个数组,放置数据或字典,然后将其作为数据传递。

所以,MyData可以是NSString,NSArray,NSDictionary,或者你需要的任何东西:)

修改

你还可以做另外一件事,它根本不包括segues。 您可以创建仅在整个应用程序生命周期中存在的静态变量。

我在所有应用程序中总是使用Constants类。

这里有一些代码:

Constants.h

@interface Constants : NSObject

+ (Constants*)shared;
@property NSString* constantA;
@property int constantB;
@property NsMutableArray array;

@end

Constants.m

@implementation Constants

static Constants *constants = nil;


+ (Constants*)shared {

if (nil == constants) {

    if (constants == nil) {
        constants = [[[self class]alloc] init];
     }
    // Remember to initialize an array (this is just an example, if you need an array. if you need only one int and string for example, skip this)
    [Constants shared].array = [[NSMutableArray alloc]init];
  }

 return constants;
 }

现在,假设您有2个ViewControllers,并且当您转到另一个变量时,您希望从第一个变量中读取一些变量。

在第一个ViewController中,只需执行以下操作:

[Constants shared].constantA = yourValue1;
[Constants shared].constantB = yourValue2;

然后,当你到达secont ViewController时,从Constants类中读取你的值,如下所示:

int        firstVal = [Constants shared].constantA;
NSString* secondVal = [Constants shared].constantB;

请记住在两个ViewControllers中#import“Constants.h”。

这在Swift中也相当容易。我不知道它的语义,但我相信你可以弄明白:)

编辑2

如果其中一个变量必须是时间,并且它取决于用户按下按钮的时间,则可以执行以下操作(在此示例中,当用户按下此格式的按钮时,您需要一段时间: @“yyyy-MM-dd HH:mm:ss”

-(IBAction) onButtonClick
{
 NSDateFormatter *DateFormatter=[[NSDateFormatter alloc] init];
[DateFormatter setDateFormat:@"yyyy-MM-dd%20HH:mm:ss"];
NSString dateTime  = [DateFormatter stringFromDate:[NSDate date]];

 [Constants shared].time = dateTime;

 // and after you do it, you can segue to another ViewController, like you do
 let view = self.storyboard?.instantiateViewControllerWithIdentifier("segue") as TableViewController
self.navigationController?.pushViewController(view, animated: true)

}