2017-04-26 3 views
0

enter image description here output imageanzeigen benutzerdefinierte Ansicht Ausgabe

, wenn ich auf den Knopf klicken erhalte ich nur 1 Extra Ansicht, aber ich möchte eine der Ansicht dynamisch auf der Anzahl der Klick hinzugefügt werden (wie zum Loop) ... Mit freundlicher helfen Sie mir mit diesem Code Vielen Dank im Voraus, dies ist nur ein Teil meines Codes

if (boolVal == true) { 
    CGRect newFrameC = CGRectMake(_centreView.frame.origin.x, _centreView.frame.origin.y, _centreView.frame.size.width, 50); 
    CGRect newFrameL1 = CGRectMake(_label2.frame.origin.x, _label2.frame.origin.y+50, _label2.frame.size.width, 50); 
    _centreView.frame = newFrameC; 
    _label2.frame = newFrameL1; 
    boolVal = false; 
}else if (boolVal == false){ 
    CGRect newFrameC = CGRectMake(_centreView.frame.origin.x, _centreView.frame.origin.y, _centreView.frame.size.width, 1); 
    CGRect newFrameL1 = CGRectMake(_label2.frame.origin.x, _label2.frame.origin.y-50, _label2.frame.size.width, 50); 
    _centreView.frame = newFrameC; 
    _label2.frame = newFrameL1; 
    boolVal = true; 
} 
+0

möchten Sie serielle Ansicht auf Hintergrund anzeigen? – xiaoming

+1

Mit welchem ​​Problem haben Sie konfrontiert? Frame wird nicht richtig oder etwas anderes eingestellt? – CodeChanger

Antwort

0

DummyViewController.m

die
#import "DummyViewController.h" 
#import "ExtraView.h" 

@interface DummyViewController() 

@property (nonatomic) unsigned int numberOfExtraViews; 
@property (nonatomic, strong) NSMutableArray<ExtraView*>* extraViews; 
@property (nonatomic, strong) UILabel* label1; 
@property (nonatomic, strong) UILabel* label2; 

@end 

@implementation DummyViewController 

-(void) removeExtraViews{ 
    for (ExtraView* extraView in _extraViews){ 
     [extraView removeFromSuperview]; 
    } 
    [_extraViews removeAllObjects]; 
} 

-(CGRect) getExtraViewFrame{ 
    CGRect extraViewFrame = _label1.frame; 
    if (_numberOfExtraViews > 0) { 
     extraViewFrame = [_extraViews lastObject].frame; 
    } 
    extraViewFrame.origin.x += extraViewFrame.size.height; 
    return extraViewFrame; 
} 

- (void) addExtraViews{ 
    //[self removeExtraViews]; 
    int numberOfExtraViewsToDraw = _numberOfExtraViews - _extraViews.count; 

    for (int iterator = 0; iterator < numberOfExtraViewsToDraw; iterator ++){ 
     CGRect extraViewFrame = [self getExtraViewFrame]; 
     ExtraView *extraView = [[ExtraView alloc]initWithFrame:extraViewFrame]; 
     [self.view addSubview:extraView]; 
     [_extraViews addObject:extraView]; 
    } 

    if (numberOfExtraViewsToDraw > 0) { 
     CGRect label2Frame = [_extraViews lastObject].frame; 
     label2Frame.origin.x += label2Frame.size.height; 
     _label2.frame = label2Frame; 
    } 

} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self addExtraViews]; 
    //rest of your code 
} 

//Use this code in initWithNib/initWithCoder. Don't copy paste the same 
-(instancetype)init{ 
    self = [super init]; 
    if (nil != self){ 
     _numberOfExtraViews = 0; 
     _extraViews = [[NSMutableArray alloc]init]; 
    } 
    return self; 
} 

//the function that gets hit when the button is tapped. 
- (void) onButtonTap{ 
    _numberOfExtraViews++; 
    [self.view setNeedsDisplay]; 
} 

folgende Anmerkung:

  1. Ich verstehe nicht, was die boolval ist, aber wenn es Makeln auf den Klick auf den Button hält, werden Sie nie mehrere views.I nahm an, es schaltet Also habe ich es überhaupt nicht benutzt.
  2. Verwenden Sie den Init-Code in InitWithNib/InitWithCoder. Kopieren Sie nicht gleich kopieren. Überschreibe den angegebenen Code nicht. Hängen Sie einfach an Ihre aktuelle init an.
  3. In meinem Code onButtonTap ist die Funktion, die getroffen wird, wenn die Schaltfläche angetippt wird.
  4. Ich habe es getan, indem Sie sicherstellen, ViewDidLoad Methode wird getroffen agin. Aber ich denke nicht, dass es notwendig ist. Sie können dies auch tun:

    //the function that gets hit when the button is tapped. 
    - (void) onButtonTap{ 
        _numberOfExtraViews++; 
        [self addExtraViews]; 
    } 
    

Was getan wurde:

  1. Lassen Sie mich rufen, was Sie als Center als extraView nennen. Es wird viele extraViews geben, also werde ich ein Array für das selbe erstellen (extraViews).
  2. Die Anzahl der Ansichten wird in numberOfExtraViews gespeichert. Initiiert auf 0 in init.
  3. Wenn die Schaltfläche angetippt wird, erhöhen wir die Anzahl und die Anzahl der Aufrufe von viewNeedsDisplay, was wiederum die viewDidLoad-Methode trifft.
  4. In viewDidLoad fügen wir die extraViews hinzu.