2016-06-29 12 views
0

(ich lerne derzeit iOS Entwicklung so in fortgeschrittenen meiner begrenzten Kenntnis entschuldige ich mich.)Wenn eine benutzerdefinierte Schaltfläche UILabel (Objective-C) aktualisieren wird nicht gedrückt

Was ich zu erreichen versuche, ist, dass Wenn Sie entweder die Additions- oder Subtraktionsschaltfläche drücken, wird die Beschriftung um eins erhöht und das Ergebnis wird durch die Beschriftung angezeigt. Ich habe Schwierigkeiten, das Ergebnis auf dem Etikett anzuzeigen.

Das ist meine ViewController.h Datei:

#import <UIKit/UIKit.h> 
#import "StepperView.h" 

@interface ViewController : UIViewController{ 
    UILabel *valueLabel; 
} 

@end 

Das ist meine ViewController.m Datei:

#import "ViewController.h" 
#import "StepperView.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    int w; 

    w = 0; 
    [super viewDidLoad]; 

    StepperView *stepperView = [[StepperView alloc] initWithFrame:CGRectMake(0, 0, 300, 50)]; 

    stepperView.center = self.view.center; 
    [self.view addSubview:stepperView]; 

    // AddButton 
    UIButton *additionButton = [[UIButton alloc] initWithFrame:CGRectMake(195, 318, 100, 100)]; 
    additionButton.frame = CGRectMake(stepperView.frame.size.width/2 + 50, stepperView.frame.size.height/2 - 25, 100, 50); 
    [self.view addSubview:additionButton]; 

    // Subtraction button 
    UIButton *subtractionButton = [[UIButton alloc] initWithFrame:CGRectMake(195, 318, 100, 100)]; 
    subtractionButton.frame = CGRectMake(stepperView.frame.size.width/2 - 150, stepperView.frame.size.height/2 - 25, 100, 50); 
    [self.view addSubview:subtractionButton]; 

    // Label 
    valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(195, 318, 100, 100)]; 
    [valueLabel setTextColor:[UIColor redColor]]; 

    [self.view addSubview:valueLabel]; 
} 

@end 

Das ist mein Delegierter und Protokoll:

StepperView.h

#import <UIKit/UIKit.h> 

@protocol SwitchViewDelegate 

- (void)switchViewValueChanged:(int)number; 

@end 

@interface StepperView : UIView 
{ 


} 

@property (nonatomic,weak) id<SwitchViewDelegate> delegate; 

@end 

Dies ist meine StepperView.m Datei

#import "StepperView.h" 

@implementation StepperView 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    [self setup]; 
    return self; 
} 

- (void)setup { 
    UIView *stepperView = [[UIView alloc] init]; 
    stepperView.frame = CGRectMake(0, 0, 300, 40); 

    stepperView.backgroundColor = [UIColor colorWithRed:21/255.0 green:101/255.0 blue:192/255.0 alpha:1.0]; 
    [self addSubview:stepperView]; 

    // Add Button 
    UIButton *rightView = [[UIButton alloc] init]; 
    rightView.frame = CGRectMake(stepperView.frame.size.width/2 + 50, stepperView.frame.size.height/2 - 20, 100, 40); 

    rightView.backgroundColor = [UIColor colorWithRed:33/255.0 green:150/255.0 blue:243/255.0 alpha:1.0]; 
    [rightView setTitle:@"+" forState:UIControlStateNormal]; 

    [rightView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    [self addSubview:rightView];   

    // Subtract Button 
    UIButton *leftView = [[UIButton alloc] init]; 
    leftView.frame = CGRectMake(stepperView.frame.size.width/2 - 150, stepperView.frame.size.height/2 - 20, 100, 40); 

    leftView.backgroundColor = [UIColor colorWithRed:33/255.0 green:150/255.0 blue:243/255.0 alpha:1.0]; 
    [leftView setTitle:@"-" forState:UIControlStateNormal]; 
    [leftView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:leftView];   

    // Label 

UILabel *valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(stepperView.frame.size.width/2, stepperView.frame.size.height/2, 100, 100)]; 

    [valueLabel setText:@"10"]; 
    [valueLabel setTextColor:[UIColor redColor]]; 
    [self addSubview:valueLabel];   
} 

- (void)buttonPressed:(id)sender{   
    UIButton *button = (UIButton *) sender; 

    NSString *title = button.titleLabel.text; 
    if([title isEqualToString:@"-"]) {       
     NSLog(@"MINUS"); 
    } else { 
     NSLog(@"PLUS"); 
    } 

    // NSLog(@"%@",title); 
    } 

@end 
+1

Ich sehe keinen Code in Bezug auf den Text valuelabel zu aktualisieren. –

+1

Ich sehe zwei "valueLabel". Ich bin mir nicht sicher, was man wirklich ändern sollte. Sie haben den Delegaten des Objekts "StepperView" nicht festgelegt, und seine Delegatmethode 'switchViewValueChanged:' wird nicht aufgerufen. Es gibt keinen Code, wenn Sie den Text nur 'NSLog()' einstellen – Larme

Antwort

0

Es ist nicht ganz klar, was Sie versuchen Sie als UI erhalten, ich bin eine mögliche Lösung, die Entsendung

  1. Der Delegierte passieren wird unter Verwendung der Informationen von StepperView zum ViewController
  2. UILabel das Ergebnis zu präsentieren, die von subview ViewController's Ansicht ist, anstelle von subview StepperView
zu sein

ViewController.h:

#import <UIKit/UIKit.h> 
#import "StepperView.h" 

@interface ViewController : UIViewController 
    @property (nonatomic, strong) UILabel *valueLabel; 
@end 

ViewController.m

#import "ViewController.h" 
#import "StepperView.h" 

@interface ViewController() <StepperViewDelegate> 

@end 

@implementation ViewController 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    StepperView *stepperView = [[StepperView alloc] initWithFrame:CGRectMake(0, 0, 300, 50)]; 

    stepperView.center = self.view.center; 
    [self.view addSubview:stepperView]; 
    stepperView.delegate = self; 

    // Label 
    self.valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(195, 318, 100, 100)]; 
    [self.valueLabel setTextColor:[UIColor redColor]]; 

    [self.view addSubview:self. 

valueLabel]; 
    } 

#pragma mark - StepperViewDelegate 

- (void)stepperView:(StepperView *)stepperView valueChanged:(NSInteger)value { 

self.valueLabel.text = [NSString stringWithFormat:@"%d", value]; 
} 
    @end 

StepperView.h

#import <UIKit/UIKit.h> 
@class StepperView 
@protocol StepperViewDelegate 
    - (void)stepperView:(StepperView *)stepperView valueChanged:(NSInteger)value 
@end 
@interface StepperView : UIView 

@property (nonatomic, weak) id<StepperViewDelegate> delegate; 

@property (nonatomic, assign) NSInteger stepperValue; 
@end 

StepperView.m

#import "StepperView.h" 

@implementation StepperView 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    [self setup]; 
    return self; 
} 

- (void)setup { 
    UIView *stepperView = [[UIView alloc] init]; 
    stepperView.frame = CGRectMake(0, 0, 300, 40); 

    stepperView.backgroundColor = [UIColor colorWithRed:21/255.0 green:101/255.0 blue:192/255.0 alpha:1.0]; 
    [self addSubview:stepperView]; 

    // Add Button 
    UIButton *rightView = [[UIButton alloc] init]; 
    rightView.frame = CGRectMake(stepperView.frame.size.width/2 + 50, stepperView.frame.size.height/2 - 20, 100, 40); 

    rightView.backgroundColor = [UIColor colorWithRed:33/255.0 green:150/255.0 blue:243/255.0 alpha:1.0]; 
    [rightView setTitle:@"+" forState:UIControlStateNormal]; 

    [rightView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    [self addSubview:rightView];   

    // Subtract Button 
    UIButton *leftView = [[UIButton alloc] init]; 
    leftView.frame = CGRectMake(stepperView.frame.size.width/2 - 150, stepperView.frame.size.height/2 - 20, 100, 40); 

    leftView.backgroundColor = [UIColor colorWithRed:33/255.0 green:150/255.0 blue:243/255.0 alpha:1.0]; 
    [leftView setTitle:@"-" forState:UIControlStateNormal]; 
    [leftView addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)buttonPressed:(id)sender{   
    UIButton *button = (UIButton *) sender; 

    NSString *title = button.titleLabel.text; 
    if([title isEqualToString:@"-"]) {       
     self.stepperValue--; 
    } else { 
     self.stepperValue++; 
    } 

[self.delegate stepperView:self valueChanged:self.stepperValue]; 
    // NSLog(@"%@",title); 
    } 

@end 

Dies sollte Ihnen eine klarere Sichtweise, wie verschiedene Komponenten zueinander passen sollten.

0

Ich bin mir nicht sicher, ob ich klar verstehe, was Sie tun möchten, aber warum versuchen Sie nicht, die UIStepper-Schaltfläche von iOS zu verwenden? Sie können Ihrem viewController eine IBAction hinzufügen und die Bezeichnung mit dem Wert vom UIStepper ändern. Mit swift:

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var valueLabel: UILabel! 
var currentValue = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


@IBAction func touchStepper(sender: UIStepper) { 
    self.valueLabel.text = "\(sender.value)" 
} 

}