0

UIBarButtonItemNSThread. _ 按下按钮后,我将启用设置为 NO,然后执行螺纹部分,最后我尝试重新启用按钮。相当基本。

不知何故,这失败了,但是我能够正确更改 UIBarButtonItem 的任何其他属性(例如标题)。

我在这里做错了什么?

@interface myViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
    IBOutlet UIBarButtonItem *myButton;

}
@property (nonatomic, retain) IBOutlet UIBarButtonItem *myButton;

- (IBAction)mysub:(id)sender;

@end



@implementation myViewController

@synthesize myButton;

- (IBAction)mysub:(id)sender {
 [myButton setEnabled:NO];

    [NSThread detachNewThreadSelector:@selector(mysub_threaded) toTarget:self withObject:nil];    
}

- (void) mysub_threaded {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    … do threaded stuff

    [myButton performSelectorInBackground: @ selector(setEnabled :) withObject: [NSNumber numberWithBool:YES]];

    [pool drain];
}
4

1 回答 1

2

你想要performSelectorOnMainThread

[myButton performSelectorOnMainThread:@selector(setEnabled:)
                           withObject:[NSNumber numberWithBool:YES]
                        waitUntilDone:NO];

始终在主线程上做任何触及 UI 的事情。

但有时像这样传递参数也很时髦。我发现最好用另一种方法完成你需要完成的所有事情

- (void)mysub_complete {
  [myButton setEnabled:YES];
}

然后用_

[self performSelectorOnMainThread:@selector(mysub_complete)
                       withObject:nil
                    waitUntilDone:NO];

现在,您可以随心所欲地进行其他 UI 操作,而无需担心。

于 2010-08-06T16:46:09.583 回答