【问题标题】:iOS Viewcontroller automatically "clicks" buttonsiOS Viewcontroller 自动“点击”按钮
【发布时间】:2014-07-25 13:20:49
【问题描述】:


我目前正在使用 XCode 5.1.1 开发 iPhone 应用程序。我只是开始使用应用程序,但事情进展顺利,直到我最近碰壁,我不知道如何克服。 在显示的第一个 Viewcontroller 上,我有两个按钮可以在语言之间切换。但是,每次显示此视图控制器时,按钮似乎都会自动“单击”,即执行按钮触发的功能。我将在此处附上 .h 和 .m 文件中的代码:
ViewController.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    NSString *settingsTitle;
    NSString *gerBtn;
    NSString *engBtn;
}

@property (strong, nonatomic) IBOutlet UIButton *english;
@property (strong, nonatomic) IBOutlet UIButton *german;
@property (strong, nonatomic) IBOutlet UIButton *settings;

- (IBAction)setEnglish:(UIButton *)sender;
- (IBAction)setGerman:(UIButton *)sender;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated
{
    if([[NSUserDefaults standardUserDefaults] boolForKey:@"englishEnabled"]){
        [_settings setTitle:@"Settings" forState:UIControlStateNormal];
    } else {
        [_settings setTitle:@"Einstellungen" forState:UIControlStateNormal];
    }
    NSLog(@"%hhd", [[NSUserDefaults standardUserDefaults] boolForKey:@"englishEnabled"]);
    [super viewWillAppear:animated];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)setEnglish:(UIButton *)sender {
    NSLog(@"setEnglishClicked");
    [self enLangChange];
}

- (IBAction)setGerman:(UIButton *)sender {
    NSLog(@"setGermanClicked");
    [self deLangChange];
}

- (void) enLangChange
{
    [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"englishEnabled"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void) deLangChange
{
    [[NSUserDefaults standardUserDefaults] setBool:false forKey:@"englishEnabled"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

@end

现在每次我导航到这个视图控制器时,当我启动应用程序时,它也会记录“setEnglishClicked”和“setGermanClicked”,并且总是将键 EnglishEnabled 的 BOOL 设置为 false。 我已经尝试了从删除按钮并将它们放回原处的所有方法,甚至从头开始新的整个项目,但它总是表现相同。奇怪的是,这个视图中“开始”和“设置”的另外两个按钮没有被“点击”。如果有人能告诉我我做错了什么,那将有很大帮助! 最好的祝福! J

【问题讨论】:

  • 尝试重命名 IBAction 方法。 setEnglish 是一个设置器,通常每当您为该属性分配某些内容时都会调用该方法。尝试重命名方法,例如:-(IBAction)didPressEnglishButton:(UIButton*)sender
  • 好吧,我刚刚检查了一下,这很有效。先生,我向您脱帽致敬,非常感谢您!!!
  • 不客气。我会将其添加为答案,以便其他可能偶然发现此问题的人更容易看到。

标签: ios objective-c uiviewcontroller


【解决方案1】:

(IBAction) 实际上定义为UINibDeclarations.h 中的(void)

因此,- (IBAction)setEnglish:(UIButton *)sender- (IBAction)setGerman:(UIButton *)sender 方法是设置器,并在您的视图控制器出现时被调用。

重命名它们,例如- (IBAction)didPressEnglishButton:(UIButton*)sender,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2016-07-22
    • 2016-12-25
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多