这是我的情况。我正在使用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”来实现这一点
答案 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)
}