如何使用 UIPickerView 更改按钮的操作

Posted

技术标签:

【中文标题】如何使用 UIPickerView 更改按钮的操作【英文标题】:How do I change the action of a button with UIPickerView 【发布时间】:2013-07-13 20:55:06 【问题描述】:

我正在尝试根据选择器视图的选定行更改按钮指向的位置。我正在尝试根据某一年显示数据,我可以让选择器显示可用年份并将标签更改为相应的年份,但是我怎样才能使我创建的“开始”按钮导致正确的视图控制器?

【问题讨论】:

在按钮单击方法处添加一个检查,这将导致基于标签中年份的正确视图控制器? @user2578110,不要忘记接受、投票或发布答案,以便每个人都知道结果。那么其他人将更有可能回答您未来的问题!祝你好运。 【参考方案1】:

也许你还没来得及弄清楚,也许你有,但这就是我要做的。您有一个将使用选择器填充的文本字段,称之为“yearTextField”。然后你有一个按钮,你想根据所讨论的年份更改操作。将此称为“myChangeableButton”。这只是一个示例,您可以随意称呼它们。我将初始视图控制器放在导航视图控制器中,以便更好地控制视图。对于这个例子,我做了两个不同的年份 1942 和 1971。它们都有自己的视图控制器,我在我的第一个视图控制器中命名为“FourtyTwoViewController”和“SeventyOneViewController”,您需要将它们导入到 .m 文件中。像这样..

#import "ViewController.h"
#import "FourtyTwoViewController.h"
#import "SeventyOneViewController.h"

此外,请确保在故事板中拖出新视图控制器时,将它们命名为这样。并且不要忘记使用该名称作为 Storyboard ID,在身份检查器下找到。现在对于 myChangableButton 我做了一个动作,它将根据 yearTextField 中的文本调出您想要的任何视图控制器,如下所示..

- (IBAction)myChangableButton:(id)sender

    if ([_yearTextField.text isEqual: @"1942"])
    
        FourtyTwoViewController *ftvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FourtyTwoViewController"];
        //[self presentViewController:ftvc animated:YES completion:nil];
        [self.navigationController pushViewController:ftvc animated:YES];
    
    else if ([_yearTextField.text isEqual: @"1971"])
    
        SeventyOneViewController *sovc = [self.storyboard instantiateViewControllerWithIdentifier:@"SeventyOneViewController"];
        //[self presentViewController:sovc animated:YES completion:nil];
        [self.navigationController pushViewController:sovc animated:YES];
    
    else
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Watch Out!" message:@"Put in valid date" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    

我注释掉的那行代码会带来一个模态转换,但我更喜欢推送,因为它会给你一个很棒的后退按钮。就是这样。我希望这对您的项目有所帮助。如果您有任何问题,请发表评论,祝您好运。欢迎!所以!!

编辑#1

这是我如何在我推送的视图控制器中设置 initialUrl 的示例。

VideoViewController *vvc = [self.storyboard instantiateViewControllerWithIdentifier:@"VideoViewController"];
vvc.initialUrlString = urlString;
vvc.descriptionString = descriptionString1;
[self.navigationController pushViewController:vvc animated:YES];

我将 VideoViewController 导入到第一个视图控制器中。 VideoViewController 有两个属性,分别称为 initialUrlString 和 descriptionString。在第一个视图控制器中,我有两个名为 urlString 和 descriptionString1 的属性,它们在另一个方法中在第一个视图控制器中设置,然后传递到第二个。

【讨论】:

嘿,谢谢你的回答!我有点尝试了你的建议,但有一些问题。我现在真正想做的是:我有一个带有选择器视图的视图控制器,可以让您选择年份和一个开始按钮。那个 go 按钮通向另一个视图控制器(两者都附加到同一个视图控制器文件..对不起,如果我的术语是关闭的)。第二个 viewcontroller 有一个 webview,我想显示指定年份的信息的 html 文件(本地存储)。我的最终问题是如何根据选择器视图的选择更改显示的 html 文件。 @user2578110 您需要将 html 文件的文件路径传递给第二个视图控制器。假设您的第二个视图控制器名为“SecondViewController”,它需要一个名为“htmlPath”的属性。当您在第一个视图控制器中选择年份时,将第一个视图控制器中的变量设置为您要显示的 html 路径。然后,当您调用第二个视图控制器时,在获得对第二个视图控制器的引用后使用此行。 “secondViewController.htmlPath = 不管YouCalledThePath;”让我知道这是否有帮助! 另外,您需要获取“whateverYouCalledThePath”并将其传递给 Web 视图以使其加载。 我对此很陌生,所以我不太明白你在做什么。目前,我的视图控制器中有一个名为 htmlname 的 nsstring 属性,它正在显示文件(称为 webview)。我已将 webview 导入到我的原始视图控制器中(称为选择器视图)。我曾尝试键入 webview.htmlname 以引用该变量,但它会引发错误。我还尝试在 selectorview 实现文件中合成 htmlname 变量。如果您知道一个很好的视觉教程或 youtube 视频,那就太好了。 @user2578110,在您执行 webview.htmlname 之前,请确保您通过执行 webview *wv = [self.storyboard instantiateViewControllerWithIdentifier:@"webview"]; 来引用您的 webview您正在告诉您的选择器视图“嘿,还有另一个名为 webview 的视图控制器”但是您确实需要确保在 Xcode 右侧列的身份检查器中调用您的 webview、webview。我不知道有什么好的视觉效果。对不起。

以上是关于如何使用 UIPickerView 更改按钮的操作的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIpickerView 上的元素按下按钮或按下另一个按钮

如何防止在拖动 UIPickerView 时触发按钮?

如何在uipickerview上添加完成按钮

如何在 UIPickerview 中添加一行

如何使用完成按钮确认我在 UIPickerView 中的选择?

如何使用完成按钮制作 UIPickerView?