Как выбрать между несколькими UILabel на ощупь? - PullRequest
1 голос
/ 11 июля 2011

У меня есть 2 настройки UIButtons (+/-) при нажатии, число изменяется на единицу в пределах UILabel.Что мне нужно сделать, чтобы иметь несколько UILabel, и когда к ним прикоснуться, я могу изменить его текущее значение с помощью кнопки UIB (+/-)?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Имейте переменную, которую вы используете в качестве активной метки, затем добавьте распознаватель жестов к обоим UIlabels для захвата нажатий:

label.userInteractionEnabled = YES;
 UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecieved:)]; 
[label addGestureRecognizer:tap];
[tap release];
//repeat for each additional label

Затем в вашем методе tapReceived поменяйте местами активную метку

 -(void) tapRecieved:(UITapGestureRecognizer *)tap{  
      currentLabel = (UILabel *) tap.view;
 }

Затем в методе, который вы захватываете клики на кнопку +/-, напишите currentLabel

Редактировать: Быстрая и грязная реализация вашей проблемы. В конструкторе интерфейсов я сделал 2 метки и кнопку и подключил их. Когда вы нажимаете на метку, она становится текущей меткой, а когда вы нажимаете на кнопку, любая выбранная вами метка увеличивается на 1. Надеюсь, это поможет.

.h

#import <UIKit/UIKit.h>

@interface junkViewController : UIViewController {

    UILabel *label;
    UILabel *label2;
    UILabel *currentLabel;
    int label1Value;
    int label2Value;
}
@property (nonatomic, retain) IBOutlet UILabel *label;

@property (nonatomic, retain) IBOutlet UILabel *label2;
- (IBAction)buttonTap:(id)sender;
@end

.m

#import "junkViewController.h"

@implementation junkViewController
@synthesize label;
@synthesize label2;

- (void)dealloc
{
    [label release];
    [label2 release];
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
}
*/
-(void) tapRecieved:(UITapGestureRecognizer *)tap{
    currentLabel = (UILabel *)tap.view;
    NSLog(@"tap %@",tap.view);
}
-(void) viewDidLoad{
    currentLabel = label;
    label.text = [NSString stringWithFormat:@"%d",label1Value];
    label2.text = [NSString stringWithFormat:@"%d",label2Value];
    label.userInteractionEnabled = YES;
    UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecieved:)]; 
    [label addGestureRecognizer:tap];
    [tap release];
    tap = nil;
    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecieved:)]; 
    label2.userInteractionEnabled = YES;
    [label2 addGestureRecognizer:tap];
    [tap release];


}
- (void)viewDidUnload
{
    [self setLabel:nil];
    [self setLabel2:nil];
    [super viewDidUnload];
       // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)buttonTap:(id)sender {
    int value = [currentLabel.text intValue] + 1;
    currentLabel.text = [NSString stringWithFormat:@"%d",value];
}
@end
0 голосов
/ 27 марта 2013

Недавно мне пришлось сделать нечто подобное для динамически создаваемого меню в моем приложении.Это сработало хорошо:

В методе создания меню:

#define NAV_WIDTH               220
#define NAV_HEIGHT              220
#define NAV_TOP_HEIGHT          16
#define NAV_ITEM_HEIGHT         30
#define NAV_BOTTOM_HEIGHT       24
#define NAV_LABEL_MARGIN        20

[navPage setFrame: CGRectMake(navLeftCorner, navTopCorner, NAV_WIDTH, NAV_HEIGHT)];
NSArray *menuTitles = [[NSArray alloc] initWithObjects: @"One", @"Two", @"Three", @"Four", nil];
int tag = 1;
double labelTop = NAV_TOP_HEIGHT;

for (NSString *title in menuTitles) {
    UILabel *itemLabel = [[UILabel alloc] initWithFrame: CGRectMake(NAV_LABEL_MARGIN, labelTop, NAV_WIDTH - (NAV_LABEL_MARGIN * 2), NAV_ITEM_HEIGHT)];
    [itemLabel setUserInteractionEnabled: YES];
    UITapGestureRecognizer *menuTap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(menuTapped:)];
    [itemLabel addGestureRecognizer: menuTap];
    [itemLabel setText: title];
    [itemLabel setTag: tag];
    [navPage addSubview: itemLabel];
    labelTop += NAV_ITEM_HEIGHT;
    tag++;
}

.,,который вызывает это при нажатии:

- (void) menuTapped: (UITapGestureRecognizer *)tap
{
    UILabel *currentLabel = (UILabel *) tap.view;
    int index = (currentLabel.tag - 1);
    /* Do stuff based on the tag index */
}

ПРИМЕЧАНИЕ. Это ARC-совместимый способ;добавьте [itemLabel release] после добавления в подпредставление, если вы не используете ARC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...