1

問題を解決した後に編集: 問題は「通常」簡単に解決できましたが、考えて、どこが間違っていたのかを理解するのに何時間もかかりました。ViewController2 を作成したときに、それを ViewController のサブクラスに設定したようです。サブクラスの場合、「親」クラスからすべてを継承します。そのため、ファイルを削除したときに、同じ名前の新しいファイルを作成しましたが、「UIViewController」のサブクラスで機能しました!

問題の写真。

ViewController 1 および 2

ストーリーボード: 上のセグエは「Test1」と呼ばれるものです。ビュー間で接続されます。下から2番目は「Test2」(使われていません!)で、「Button」とViewController2の間に接続されています。

私は Objective-C プログラミングの初心者で、問題にぶつかりました。

写真 1 を見ると、3 つのボタンがあるメニューが表示されます。プログラムで作成された 2 つのボタンは、"NEWBUTTON" と "NEWBUTTON2" という名前です。「NEWBUTTON」をクリックすると、ViewController2 の 2 つのボタンを作成するセグエが呼び出されます。問題は、ViewController2 にも「NEWBUTTON」と「NEWBUTTON2」が表示されることです。ViewController2 には、2 つのボタンと 1 つのラベルしかないと想定されています。

写真からわかるように、「BUTTON」という名前のボタンは ViewController2 に表示されません。「BUTTON」はプログラムで作成するのではなく、ストーリーボードからドラッグ&ドロップで作成します。

ViewController の 2 つのボタンの作成方法の例。AddMyButton は、ボタンを作成し、2 つのパラメーター (NSString と int) を取る関数です。この prepareForSegue メソッドは、最初の ViewController にあります。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Test1"])
{
    ViewController2 *vc = [[ViewController2 alloc]init];


    vc = [segue destinationViewController];
    UIButton *bt = [[UIButton alloc]init];

    [vc.view addSubview:bt = [self addMyButton:@"HAHA": 0]];
    [vc.view addSubview:bt = [self addMyButton:@"HLAAA": 50]];
    vc.laabel.text = @"HAh";

}
/*else if ([segue.identifier isEqualToString:@"Test2"])
{
    ViewController2 *vc = [[ViewController2 alloc]init];


    vc = [segue destinationViewController];
    UIButton *bt = [[UIButton alloc]init];

    [vc.view addSubview:bt = [self addMyButton:@"HAHA": 0]];
    [vc.view addSubview:bt = [self addMyButton:@"HLAAA": 50]];
    vc.laabel.text = @"HAh";

}*/



}

最初のビューのボタンの作成例:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *ny = [self addMyButton:@"NEWBUTTON": 100];
    [self.view addSubview:ny];
    ny = [self addMyButton:@"NEWBUTTON2": 150];
    [self.view addSubview:ny];
// Do any additional setup after loading the view, typically from a nib.
}

ボタンがセグエを実行する方法の例:

-(void)buttonPressed:(UIButton*) sender
{
    if ([sender.titleLabel.text isEqual: @"NEWBUTTON"]) {
        [self performSegueWithIdentifier:@"Test1" sender:sender];
    } else if ([sender.titleLabel.text isEqual: @"NEWBUTTON2"]) {
        [self performSegueWithIdentifier:@"Test2" sender:sender];
    } else {
        NSLog(@"HELLO");
    }
}
4

3 に答える 3

0

このコードを viewDidLoad メソッド内に実装します

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button1.frame = CGRectMake(50, 10, 70, 50);
[button1 setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[button1 setBackgroundColor:[UIColor clearColor]];
[button1 setTag:1];
[button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button1 setTitle:@"Button1" forState:UIControlStateNormal];
[self.view addSubview:button1];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button2.frame = CGRectMake(130, 10, 70, 50);
[button2 setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[button2 setBackgroundColor:[UIColor clearColor]];
[button2 setTag:2];
[button2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button2 setTitle:@"Button2" forState:UIControlStateNormal];
[self.view addSubview:button2];

ストーリー ボード ベースのアプリケーションに 2 つのボタンが作成されます。絵コンテなしでも同じように動作します。お役に立てば幸いです。ありがとう

于 2013-05-08T12:37:34.940 に答える
0

それを試してみてください....

UIButton *oddBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
oddBtn.frame = CGRectMake(10, 10, 70, 70);
[oddBtn setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[oddBtn setBackgroundColor:[UIColor clearColor]];
[oddBtn setTag:i];
[oddBtn addTarget:self action:@selector(getCategoryDetail:) forControlEvents:UIControlEventTouchDown];
[self.View addSubview:oddBtn];

私が助けてくれることを願っています

于 2013-05-08T12:24:11.873 に答える
0

最後に私はそれを手に入れました..:) 新しいプロジェクトを作成して問題をシミュレートしました。

ストーリーボードで 2 番目のビュー コントローラーのクラスを確認します。ViewControllerになります 。私は正しいですか?ViewController2に変更

于 2013-05-08T14:06:38.263 に答える