0

問題は、viewcontroller (ViewController) に 9 つのボタンがあり、これらすべてのボタン アウトレットを格納するためのアウトレット コレクションがあることです。

次に、これらのボタンのクリック イベントを処理するためのアクション メソッドがあります。

私が欲しいのは、CLICKED ボタンのボタン画像の背景 (UIImage * img として) を送信し、別のビューコントローラー (vc2) にセグエすることです。

ここに私のコードがあります:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *cardBtns;


- (IBAction)cardAction:(id)sender;

@end




#import "ViewController.h"
#import "ResultViewController.h"

@interface ViewController ()
@property(strong,nonatomic)UIImage *image;
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (IBAction)cardAction:(id)sender {
for(UIButton *cardButton in self.cardBtns){
    self.image = [cardButton currentBackgroundImage];
}
[self performSegueWithIdentifier:@"cardSegue" sender:self.image];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//UIImage * img = [UIImage imageNamed:@"f1"];
UIImage * img = (UIImage *)sender;

ResultViewController *viewcontroller = [segue destinationViewController];
viewcontroller.img = img;
}

@end

vc2 では、ここに別のボタンがあり、このボタンの背景画像を vc1 セグエから送信されたばかりの画像でペイントしたいと考えています。

@interface ResultViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *cardBtn;
@property(strong,nonatomic)UIImage *img;

- (IBAction)cardDismiss:(id)sender;

@end



#import "ResultViewController.h"

@interface ResultViewController ()

@end

@implementation ResultViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
[self.cardBtn setImage:self.img forState:UIControlStateNormal];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


- (IBAction)cardDismiss:(id)sender {
[self dismissViewControllerAnimated:NO completion:nil];
}
@end

私のボタンが1,2,3,4,5,6,7,8,9であると仮定します

今のところ、vc1 でどのボタンをクリックしても、vc2 では常に「6」と表示されます... 何か提案はありますか? ありがとう

4

1 に答える 1

1

問題はこれです:

- (IBAction)cardAction:(id)sender {
for(UIButton *cardButton in self.cardBtns){
    self.image = [cardButton currentBackgroundImage];
}
[self performSegueWithIdentifier:@"cardSegue" sender:self.image];
}

これにより、self.imageがself.cardBtnsの最後のアイテムに設定されます。self.imageをsender.currentBackgroundImageに設定し(そして引数タイプのidをUIButton *に変更し)、ループを削除します。

于 2013-03-08T16:28:30.883 に答える