【问题标题】:xcode - multiple instances of custom viewxcode - 自定义视图的多个实例
【发布时间】:2015-10-25 15:27:07
【问题描述】:

我创建了一个带有故事板的自定义 UIViewController,这是类: .h 文件:

#import <UIKit/UIKit.h>

@interface PlayerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *PlayerNumber;
@property (weak, nonatomic) IBOutlet UIImageView *PlayerImage;
@property (weak, nonatomic) IBOutlet UILabel *PlayerNameLabel;

-(void)setPlayerName:(NSString*)PlayerNameString;

@end

.m 文件:

#import "PlayerViewController.h"

@interface PlayerViewController ()

@end

@implementation PlayerViewController
@synthesize PlayerImage,PlayerNameLabel,PlayerNumber;


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

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

-(void)setPlayerName:(NSString *)PlayerNameString{
self.PlayerNameLabel.text=PlayerNameString;
}

@end

我从主视图创建了 2 个 PlayerViewController 实例以显示 2 个自定义视图:

- (void)viewDidLoad {
[super viewDidLoad];

[self DrawPlayerWithTag:1];
[self DrawPlayerWithTag:2];
}


- (void)DrawPlayerWithTag:(int)PlayerTag{
PlayerViewController *myPlayerViewController = [self.storyboard  instantiateViewControllerWithIdentifier:@"PlayerViewController"];
UIView *myPlayerView=myPlayerViewController.view;
myPlayerView.tag=PlayerTag;
myPlayerView.frame=CGRectMake(0, 0, 100, 100);
myPlayerView.center = CGPointMake(self.view.frame.size.width / 2,
                                 self.view.frame.size.height / 2);

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doDoubleTap)];
doubleTap.numberOfTapsRequired = 2;
[myPlayerView addGestureRecognizer:doubleTap];


[self.view addSubview:myPlayerView];
[myPlayerViewController setPlayerName:@"NameA"];

}

它似乎工作。 但是,如果我想更改 PlayerName,如何在双击事件后引用 view1 而不是 view2,并使用 setPlayerName 方法?

非常感谢您的回答!

【问题讨论】:

    标签: ios xcode uiview custom-view


    【解决方案1】:

    更改回调方法

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doDoubleTap:)];
    

    你可以像这样获取视图的标签:

    -(void)doDoubleTap:(UITapGestureRecognizer *)gesture{
       NSLog(@"%ld", gesture.view.tag);
    }
    

    您可以保留您的代码并使用此帖子Get to UIViewController from UIView? 调用setPlayerName

    但是,我建议这样:

    • gesture 设置目标是myPlayerViewController

      UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:myPlayerViewController action:@selector(doDoubleTap:)];

    • 通过如下数组将 myPlayerViewController 的引用保存在“主视图”中:

      [arrPlayerView addObject:myPlayerViewController]; /// keep pointing to myPlayerViewController, so it isn't released.

    • (void)doDoubleTap:(UITapGestureRecognizer *)gesture 放入PlayerViewController

    【讨论】:

    • 嗨,很清楚,但是一旦我得到标签,我该如何调用 setPlayerName 方法?谢谢
    • 太好了,效果很好,非常感谢,Beppe
    • 嗨,anthu,我已经标记了你的答案,但似乎我们必须等待我的声誉达到 15 才能看到它的效果...... Ciao grazie
    • @Beppe 标记正确与 upvote 不同。赞成票是三角形。标记答案是复选符号。它在2个三角形之间。 :)
    • @Beppe 并且标记正确不需要声誉。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2012-07-27
    相关资源
    最近更新 更多