从视图中删除按钮似乎很简单,但是它不起作用。



MyViewController.h

#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController
@property (strong, nonatomic, readonly, getter = getMyButton) UIButton* myButton;

- (id) init;
- (id) getMyButton;

@end




MyViewController.m

#import "MyViewController.h"
@interface MyViewController ()
@end
@implementation MyViewController
@synthesize myButton = _myButton;

- (id) init
{
    if([super initWithNibName: nil bundle: nil])
    {
        _myButton = nil;
    }
    return self;
}

- (id) getMyButton
{
    if(!_myButton) _myButton = [self createMyButton];
    return _myButton;
}

- (void) viewDidLoad
{
    [super viewDidLoad];
    UIButton* myButton = self.myButton;
    [self.view addSubview: myButton];
}

- (void) didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (UIButton*) createMyButton
{
    UIButton *button = [[UIButton alloc] init];
    [button setTitle: @"My Button"
            forState: UIControlStateNormal];

    [button addTarget: self
               action: @selector(myAction:)
     forControlEvents: UIControlEventTouchUpInside];

    button.frame = CGRectMake(10, 10, 100, 40);
    return button;
}

- (void) myAction: (id) sender
{
    [self.myButton performSelectorOnMainThread: @selector(removeFromSuperview) withObject: nil waitUntilDone: NO];
}
@end




但是没有运气。单击按钮根本不执行任何操作。

如果不是并发问题,那么可能是内存管理问题?我不知道这也许只是愚蠢的事情。

我尝试将以下行放入myAction方法中

NSLog(@"Test 1");
if(_startButton.superview) NSLog(@"Test 2");


仅记录“测试1”。也许这是一个线索,但我不知道的是为什么将按钮添加到视图并在屏幕上可见时,它没有超级视图

附加信息

我不知道这是否相关,但也许


我只是从开发人员程序中updated Xcode到最新版本(它最多支持iOS 7.0以前的版本,现在是7.1)。
我刚刚开始在实际的iPhone上测试该应用程序(尽管在模拟器上测试时遇到相同的问题)
大约与此问题同时出现,我还注意到NSLog函数在AppDelegate applicationHasLaunched方法内部不起作用


谢谢

最佳答案

按钮是类家族,应使用[UIButton buttonWithType:]创建

关于ios - RemoveFromSuperView在UIButton上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23109431/

10-14 21:16