-1

私のプロジェクトでは、アプリを初めて起動するときに最初の実行ビューを表示したいと思います。これを行うために、mainViewCntroller.mにUIViewを追加しました。この(オーバーレイされた)ビューを閉じるために、acceptButtonというボタンをビューに配置しました。このビューをスタックから削除するには、ボタンにどのコードを追加する必要がありますか?

私は何を間違えますか?

これが私のコードです:

- (void) firstRun {
if (((AppDelegate*)[UIApplication sharedApplication].delegate).firstRun)
{
    CGFloat height = [[UIScreen mainScreen] bounds].size.height;
    CGFloat width = [[UIScreen mainScreen] bounds].size.width;

    NSLog(@"%f", height);

    CGRect myFrame = CGRectMake(0, 0, width, height);
    UIView *myView = [[UIView alloc] initWithFrame:myFrame];
    myView.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
    myView.tag = 12345;
    [self.view addSubview:myView];

    // Create a ScrollView and a label
     UIScrollView *discScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(20.0f, 0.0f, self.view.frame.size.width - 20, self.view.frame.size.height -70)];
     discScroll.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

     UILabel *discLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];
     discLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

     NSString *labelText = NSLocalizedString (@"InfoText",@"");
     [discLabel setText:labelText];

     // Tell the label to use an unlimited number of lines
     [discLabel setNumberOfLines:0];
     [discLabel setNumberOfLines:0];
     [discLabel setBackgroundColor:[UIColor clearColor]];
     [discLabel setFont:[UIFont boldSystemFontOfSize:17]];
     discLabel.textColor = [UIColor colorWithRed:255 green:255 blue:255 alpha:1.0];
     //[infoLabel sizeToFit];

     CGSize infoLabelSize = [discLabel.text sizeWithFont:discLabel.font
     constrainedToSize:CGSizeMake(discScroll.frame.size.width, 5000)
     lineBreakMode:UILineBreakModeWordWrap];

     discLabel.frame = CGRectMake(0, 0, infoLabelSize.width, infoLabelSize.height);
     discScroll.contentSize = infoLabelSize;

     [discScroll addSubview:discLabel];

     [self.view addSubview:discScroll];

    UIButton *acceptButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    acceptButton.frame = CGRectMake(110, [[UIScreen mainScreen] bounds].size.height - 74, 100, 44);
    // position in the parent view and set the size of the button
    [acceptButton setTitle:@"Click Me!" forState:UIControlStateNormal];
    // add targets and actions
    [acceptButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    // add to a view
    [self.view addSubview:acceptButton];


}
}

-(IBAction)buttonClicked:(id)sender
{

[[self.myView viewWithTag:12345] removeFromSuperview];

}

私のmainViewController.hには、次のプロパティがあります。

@property (weak, nonatomic) IBOutlet UIView *myView;

編集私は完全なコードを投稿しました。多分何か他のものが邪魔です。

4

6 に答える 6

6

次のコードは私のために機能します。

新しい XCode プロジェクト (シングル ビュー ベース) を開き、次のコードを追加しました。

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    myView.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
    myView.tag = 12345;
    [self.view addSubview:myView];

    UIButton *acceptButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    acceptButton.frame = CGRectMake(0, 0, 100, 44);
    [acceptButton setTitle:@"Click Me!" forState:UIControlStateNormal];
    [acceptButton addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];
    [myView addSubview:acceptButton];

    [myView release];


}

- (void)buttonClicked{
    [[self.view viewWithTag:12345] removeFromSuperview];
}

これはiPhoneシミュレーターでうまくいきました....MainViewController.mのこのコードだけです...他には何もありません...試してみてください。あなたにもうまくいくことを願っています:-)

于 2013-03-07T15:39:05.603 に答える
3
 [acceptButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

あなたのメソッドがacceptButtonと呼ばれるとき、に変更します

 [acceptButton addTarget:self action:@selector(acceptButton:) forControlEvents:UIControlEventTouchUpInside];
于 2013-03-07T14:33:01.447 に答える
1

ターゲットはに設定されてbuttonClickedいますが、使用していますacceptButton

[acceptButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];


-(IBAction)buttonClicked:(id)sender
 {
  [self.myView removeFromSuperview];
 }
于 2013-03-07T14:34:30.557 に答える
0

タグを付けるだけです...

UIView *myView = [[UIView alloc] initWithFrame:myFrame];
myView.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
myView.tag = 12345;
[self.view addSubview:myView];
[myView release];

-(IBAction)acceptButton:(id)sender{
[[self.view viewWithTag:12345] removeFromSuperview];
}

また、変更します

action:@selector(buttonClicked:)

action:@selector(acceptButton:)
于 2013-03-07T14:45:14.463 に答える
0
[acceptButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

例外は明らかで、「buttonClicked」という名前の関数はありません

以下のコードでコードの一部を変更するだけです。

[acceptButton addTarget:self action:@selector(acceptButton:) forControlEvents:UIControlEventTouchUpInside];
于 2013-03-07T14:36:21.533 に答える
0

問題は[acceptButton addTarget:self action:@selector(buttonClicked:)ラインにあります。その呼び出しでbuttonClickedメソッドに変更します。acceptButton:

于 2013-03-07T14:33:12.183 に答える