我正在尝试使用代码创建一个"动态"按钮,我希望该按钮执行segue到不同的控制器.据我所知,以编程方式创建segue是不可能的,但如果创建的按钮不在我的故事板上,怎么能通过呢?
这是创建按钮的代码:
- (void)addButton:(UIView*)view inLocation:(CGPoint)point
{
UIButton *but=[UIButton buttonWithType:UIButtonTypeRoundedRect];
but.frame= CGRectMake(point.x, point.y,30,30);
[but setTitle:@"CHOOSE" forState:UIControlStateNormal];
// The nilSymbol should call a method that will perform the segue
[but addTarget:self action:@selector(nilSymbol) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:but];
}
Run Code Online (Sandbox Code Playgroud)
有任何选择吗?
我有一个在用户输入电子邮件信息后按下的按钮。我有一个警报视图,当没有输入电子邮件时会显示该视图,但如果有,我希望按钮转到另一个视图控制器。
以下代码导致我的应用程序崩溃。我不知道为什么。请帮忙。
(注意:我尝试过“sender:self]”、“sender:nil]”和“sender:sender]”,它们都使我的应用程序崩溃。)
- (IBAction)nextButtonPushed:(id)sender {
if ([self.emailTextField.text isEqual: @""]) {
emailAlertView = [[UIAlertView alloc] initWithTitle:@"Missing Email" message:@"A destination email is required to send." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[emailAlertView show];
self.nextButton.enabled = NO;
}
else {
eString = self.eTextField.text;
hString = self.hField.text;
emailAddress = self.emailTextField.text;
[userDefaults setObject:eString forKey:@"e"];
[userDefaults setObject:hString forKey:@"h"];
[userDefaults setObject:emailAddress forKey:@"email"];
[self performSegueWithIdentifier:@"next" sender:self];
}
}
Run Code Online (Sandbox Code Playgroud) 我有多个segue设置但我想阻止它在满足条件时转到下一个视图控制器.我已经查看了shouldPerformSegueWithIdentifier但我不确定如何实现它,因为我正在使用多个segues?我目前的代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if (([[segue identifier] isEqualToString:@"push_1"]) && ([self checkForNetwork] == YES))
{
//Pass object to next viewcontroller
ID * object = currentID
//go to next viewcontroller
[[segue destinationViewController] getID:object];
}
if ([[segue identifier] isEqualToString:@"push2"] && ([self checkForNetwork] == YES))
{
//Pass object to next viewcontroller
ID * object = currentID;
//go to next viewcontroller
[[segue destinationViewController] getID:object];
}
if ([[segue identifier] isEqualToString:@"push3"] && ([self checkForNetwork] == YES))
{
//Pass object to next viewcontroller
ID * object …Run Code Online (Sandbox Code Playgroud) 我正在使用xcode 7 beta和swift 2.0.我正在关注教程(youtube.com/watch?v=PKOswUE731c).
总之,我有一个有3个视图的故事板; 受保护的vc,登录vc和RegisterViewController.我设置了2个segues
使用loginView标识的protected_vc < - > login_vc的segue模式
login_vc中的按钮上的segue模式< - >使用registerView标识的RegisterViewController
我在登录vc上使用注册按钮时遇到问题.如果我单击注册按钮它会崩溃应用程序,我收到消息'Receiver (<registerLogin.RegisterViewController: 0x7f97235f6140>) has no segue with identifier 'loginView''
现在我注意到在教程中选择一个segue给出另一个下拉列表,在我的情况下我只看到push - modal -popover - replace和custom.这可能是原因吗?
或者这部分ViewController
override func viewDidAppear(animated: Bool) {
self.performSegueWithIdentifier("loginView", sender: self);
}
Run Code Online (Sandbox Code Playgroud)
RegisterViewController的完整代码是
import UIKit
class RegisterViewController: ViewController {
@IBOutlet weak var userEmailTextField: UITextField!
@IBOutlet weak var userPasswordTextField: UITextField!
@IBOutlet weak var repeatPasswordTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() …Run Code Online (Sandbox Code Playgroud) 我是自学Swift用户并试图做一些简单的事情,但它让我很难过.我有一个简单的登记表.在提交注册项目后,我想通过segue将页面移动到"如何工作"页面,但仅当我的restful API返回成功时.这是我到目前为止所拥有的; 随时给我一个更好的方法来做这件事.所有的批评都是受欢迎的.
let myUrl = NSURL(string:"http://www.example.com/scripts/Register.php")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let postString = "email=\(email)&password=\(pass)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if (error != nil) {
println("Error: \(error)")
return
}
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary
var showTutorial : Bool = false
if let parseJSON = json {
var returnValue = parseJSON["status"] as? String
println("Status: \(returnValue)")
var isUserRegistered: Bool = false
if (returnValue == …Run Code Online (Sandbox Code Playgroud) 我有一个视图控制器(在导航控制器中)A切换到视图控制器B,视图控制器C也切换到B(A - > B < - C).视图控制器B用于选择传递回A或C的值,但如果单击"取消"或"完成",它将使用展开segue返回仅一个控制器,以最后连接的为准.
我有一个充满图像的tableView.当用户点击图像(在单元格内)时,使用popover segue调用具有较大可缩放版本图像的viewController.当我解除弹出窗口并返回到我的tableView时,它会自动显示表格的顶部单元格.有没有办法阻止这种情况发生,并在调用popover之前返回上一个位置/单元格?
编辑:打电话给我使用的popover
performSegueWithIdentifier("segueToPopOver", sender: tap.view)
Run Code Online (Sandbox Code Playgroud)
解雇它我使用以下内容:
let tmpController :UIViewController! = self.presentingViewController;
self.dismissViewControllerAnimated(true, completion: {()->Void in
tmpController.dismissViewControllerAnimated(true, completion: nil);
});
Run Code Online (Sandbox Code Playgroud) 我有3个MVC,在这里命名为A,B,C.
A是主MVC,按钮"Menu"通过popover segue连接到B.
A还连接到C,手动显示segue.
B是一个弹出窗口MVC,按钮"Detail"连接到A,带有展开segue.
C是具有详细信息的细节MVC.
在A.的展开函数内部,我调用performSegueWithIdentifier来显示C.
预期的行为是
但运行我得到的应用程序.
C突然出现并消失,这不是我想要的.
一些额外的信息
我有以下方法:
@IBAction func postcodeTextfieldDidChanged(_ sender: UITextField) {
if (postcodeTextField.text?.characters.count == 4) {
self.postcode = postcodeTextField.text
postcodeHas4Chars = true
} else {
postcodeHas4Chars = false
}
}
Run Code Online (Sandbox Code Playgroud)
而准备方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CoffeeShopListWithPostcode" {
if (postcodeHas4Chars == true) {
if let list = segue.destination as? CoffeeShopListVC {
list.postcode = postcode
} else {
print("Data NOT Passed!")
}
}
} else { print("Id doesnt match with Storyboard segue Id")
}
}
Run Code Online (Sandbox Code Playgroud)
代码工作,我可以将邮政编码发送到下一个ViewController,但是如何更改代码以在第四次输入后自动调用该方法?此时,用户必须手动退出输入才能执行.
我已经阅读了有关此问题的几篇文章,但都没有解决我的问题。
我正在编写一个应用程序,我必须单击一个按钮(“准备”)以转到以下ViewController。单击该按钮时,它还会在两个视图控制器之间传递数据。
问题是,当我单击按钮时,以下ViewController加载两次。因此,如果我想返回,则必须返回两个相同的ViewController。
我已经检查了segue,类名和文件名,但没有任何修复方法。
我还创建了一个新项目,并从一开始就重写了所有代码,但最后仍然无法正常工作。
但是,我注意到在添加prepare(forSegue :)函数和performSegue函数时出现了问题。没有它,ViewController只会加载一次。但是,当然,没有它我就无法在视图之间传递数据。
这是我的两个视图的屏幕快照以及两个函数的代码:
// Prepare the segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "prepareSegue" {
let timerViewController = segue.destination as! CountdownViewController
timerViewController.timeInterval1 = waitingTime
timerViewController.timeInterval2 = shootingTime
timerViewController.lastSeconds = lastSeconds
timerViewController.currentTimeInterval = waitingTime
}
}
// Prepare the timer when the button is pushed
@IBAction func prepareTimer(_ sender: Any) {
performSegue(withIdentifier: "prepareSegue", sender: self)
}
Run Code Online (Sandbox Code Playgroud) ios ×10
segue ×10
swift ×5
objective-c ×3
iphone ×2
swift3 ×1
uibutton ×1
uistoryboard ×1
uitableview ×1
unwind-segue ×1
viewdidload ×1
xcode6 ×1