私は客観的なCとiphoneの開発でnewbyをしています。私は混乱した。私は別のボタンをクリックした後、実行時に作成されているボタンを作成しようとすると、アプリケーションがそれを知らない:私は間違って何をやっているnsinvocationが呼び出されますか?
-(void)button4Pushed{
NSLog(@"Button 4 pushed\n");
Class cls = NSClassFromString(@"UIButton");//if exists {define class},else cls=nil
id pushButton5 = [[cls alloc] init];
CGRect rect =CGRectMake(20,220,280,30);
NSValue *rectValue = [NSValue valueWithCGRect:rect];
//--------------1st try set frame - work,but appears at wrong place
//[pushButton5 performSelector:@selector(setFrame:) withObject:rectValue];
//--------------2nd try set frame + this work correctly
[pushButton5 setFrame: CGRectMake(20,220,280,30)];
//this work correct [pushButton5 performSelector:@selector(setTitle:forState:) withObject:@"5th Button created by 4th" withObject:UIControlStateNormal];
//but i need to use invocation to pass different parameters:
NSMethodSignature *msignature;
NSInvocation *anInvocation;
msignature = [pushButton5 methodSignatureForSelector:@selector(setTitle:forState:)];
anInvocation = [NSInvocation invocationWithMethodSignature:msignature];
[anInvocation setTarget:pushButton5];
[anInvocation setSelector:@selector(setTitle:forState:)];
NSNumber* uicsn =[NSNumber numberWithUnsignedInt:UIControlStateNormal];
NSString *buttonTitle = @"5thbutton";
[anInvocation setArgument:&buttonTitle atIndex:2];
[anInvocation setArgument:&uicsn atIndex:3];
[anInvocation retainArguments];
[anInvocation invoke];
[self.view addSubview:(UIButton*)pushButton5];
}
?呼び出しが呼び出されますが、私はそれをこのように作成することができることを知って何の結果... ありません:
UIButton *pushButton3 = [[UIButton alloc] init];
[pushButton3 setFrame: CGRectMake(20, 140, 280, 30)];
[pushButton3 setTitle:@"I'm 3rd button!created by 2nd" forState:UIControlStateNormal];
[self.view addSubview:pushButton3];
は、しかし、私は呼び出しを使用する必要があり、なぜそれが働いていないのか分からないのですか?
ありがとうございました。
あなたは正しいです。どうもありがとう。実際にはNSArrayに渡してNSValueから取得する必要があるため、NSNumberを使用してUIControlStateをラップします。私は2日間過ごしましたが、これをどうやって行うのか分かりません。 – Alexander
@アレクサンダー - 問題なく、今はあなたのために働いてうれしいです。あなたがまだ他の問題を解決したかどうかは分かりませんが、NSInvocationの後には常にUIControlState ***をラップして保存することができます。いずれにしても、幸運を祈り、どんな答えでも受け入れることを忘れないでください。 – Perception
知覚は、UIControlStateをラッピングして機能させる問題を助け、解決されました。あなたはそれについて読むことができます[ここ](http://stackoverflow.com/questions/7036665/nsvaluegetvalue-strange-behavior-why-this-happens) – Alexander