2013-03-20 51 views
0

我動態創建UILabels,然後將它們的標籤保存在NSMutableArray中。然後我有一個方法可以檢測這些UILabels上的點擊(點擊)。基本上,當點擊一個已經被動態生成的UILabel時,我希望刪除它而不刪除其他標籤。但是,將來我可能想要做更多的事情,然後刪除。但目前我覺得我陷入了死衚衕,試圖找到一種方法來做到這一點。有任何想法嗎?點擊獲取標籤的UILabel

繼承人我的代碼:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
// set corner radius 
coverview.hidden=YES; 
labeltextfield.hidden=YES; 
textcreate.hidden=YES; 


labeltags = [NSMutableArray array]; 
labeltext = [NSMutableArray array]; 

} 

-(IBAction)removeboard 
{ 
[labeltextfield resignFirstResponder]; 
} 

-(void)showtextcreator { 
// Create bg cover 
coverview.hidden=NO; 
labeltextfield.hidden=NO; 
textcreate.hidden=NO; 

//Make sure creating screen is always on top 
[self.view bringSubviewToFront:coverview]; 
[self.view bringSubviewToFront:labeltextfield]; 
[self.view bringSubviewToFront:textcreate]; 

} 

-(void)createtext {  
NSInteger obj = [labeltags count] +1 ; 
[labeltags addObject:[NSNumber numberWithInteger:0]]; 

int posx = arc4random() % 300 ; 
int posy = arc4random() % 400 ; 
int frame = arc4random() % 400 ; 

NSString *txt = labeltextfield.text; 
// NSString *framename = (@"frame%i",frame); 

[labeltext addObject:txt]; 

[labeltags addObject:[NSNumber numberWithInteger:0]]; 

CGRect labelframe = CGRectMake(posx, posy, 100, 30); 
label = [[UILabel alloc] initWithFrame: labelframe]; 
[label setText: [NSString stringWithFormat:@"%@", txt]]; 
[label setTextColor: [UIColor orangeColor]]; 
label.backgroundColor = [UIColor clearColor]; 
label.tag=obj; 
[self.view addSubview: label]; 

label.userInteractionEnabled = YES; 

UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] 
            initWithTarget:self 
            action:@selector(labelDragged:)]; 
[label addGestureRecognizer:gesture]; 

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)]; 

[label addGestureRecognizer:recognizer]; 



coverview.hidden=YES; 
labeltextfield.hidden=YES; 
textcreate.hidden=YES; 


} 

- (void)labelDragged:(UIPanGestureRecognizer *)gesture 
{ 
label = (UILabel *)gesture.view; 
CGPoint translation = [gesture translationInView:label]; 

// move label 
label.center = CGPointMake(label.center.x + translation.x, 
          label.center.y + translation.y); 

// reset translation 
[gesture setTranslation:CGPointZero inView:label]; 
} 


- (void)tapAction { 
    UILabel *labelnew = (UILabel *)[self.view viewWithTag:1]; 
    NSLog(@"Text is %@",labelnew.text); 
} 

回答

5
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)]; 
[label addGestureRecognizer:recognizer]; 

- (void)tapAction:(UITapGestureRecognizer *)tapGesture { 
    UILabel *labelTapped = (UILabel *)tapGesture.view; 
    //delete it using removeFromSuperView or do whatever you need with tapped label 

} 

詳情:

1.Modify您-(void)createtext方法。

2:一個參數添加到目標UITapGestureRecognizer

3.Receive發件人手勢在- (void)tapAction:

4.Get抽頭UILabel

就是這樣。

+0

令人驚歎!我使用removeFromSuperView,它效果很好。非常感謝你。 – 2013-03-20 18:54:02

+0

我最歡迎:) – 2013-03-20 18:54:40