2013-10-23 3 views
0

어떻게하면 좋습니까?보기에 임의의 수의 버튼을 추가하십시오.

2 개의 UIView가 있습니다. MainNavView 및 SubNavView를 호출 할 수 있습니다. MainNavView에는 설정된 수의 단추가 있습니다 (6 개).

사용자가 MainNavView에서 첫 번째 버튼을 클릭하면 SubNavView로 이동하고이보기에는 예를 들어 4 개의 버튼이 있습니다. MainNavView에서 두 번째 버튼을 클릭하면 SubNavView로 이동하지만, 예를 들어 이번에는 2 개의 버튼이 있습니다.

그래서 MainNav의 각 버튼에는 다른 수의 버튼이있는 SubNavView가 있습니다. 각 "SubNavView"에 대한 버튼의 수는 알고 있습니다.

저는이 작업을 수행하는 방법에 조금 얽혀 있습니다. 내 모든 단추가 내 pushButton 동작에 연결되어 있습니다. 그런 다음 어떤 버튼이 눌러 졌는지에 따라 여러 개의 버튼을 만들고 NSMutableArray에 추가합니다.

그런 다음 prepareForSegue에서이 배열을 SubNavView로 보내서 단추로 채 웁니다. 나는 올바른 방향으로 가고있는가?

다음은 현재 내 MainNavView.m에있는 것입니다. 나는 switchNodeView (처음에 viewDidLoad에 코드 추가)에서 화면에 2 개의 버튼을 그릴 수 있는지 테스트하기 위해 switch-case 코드를 사용했다.

EDIT * 예를 살펴보면 MainNavView에서 단추의 태그를 가져온 다음 MainNav 단추 태그를 기반으로 SubNavView의 viewDidLoad에서 만드는 모든 SubNav 단추를 수행해야합니다. 신분증? 이 올바른지? 그렇다면 SubNavView의 viewDidLoad에서 푸시 된 버튼에 대한 액세스 권한을 얻는 방법은 무엇입니까? prepareForSegue에서이 행을 확인할 수 없습니다.

[vc setSelectedButton:tagIndex]; 

는 MainNavView.m에 다음에 코드로 업데이트 :

-(IBAction)pushButton:(id)sender 
{ 
    [self performSegueWithIdentifier:@"segueToSubNav" sender:sender]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"segueToSubNav"]) 
    { 
     // Get reference to the destination view controller 
     SubNavViewController *vc = [segue destinationViewController]; 

     // Get button tag number 
     NSInteger tagIndex = [(UIButton *) sender tag]; 

     // Pass any objects to the destination view controller here 
     //[vc setSelectedButton:tagIndex]; 
    } 
} 

enter code here 

당신은 당신의 SubNavView 클래스에 property를 추가 할 수

#import "ViewController.h" 
#import "SubNavViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize buttons; 
@synthesize myButton1, myButton2; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)pushButton:(id)sender 
{ 
    int theTag = ((UIView *) sender).tag; 

    switch (theTag) 
    { 
     case 1: 
     { 
      NSLog(@"Getting Here"); 

      buttons = [[NSMutableArray alloc] init]; 

      // Button 1 
      myButton1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
      myButton1.tag = 1; 
      // X, y, width, height 
      myButton1.frame = CGRectMake(60, 60, 100.f, 100.f); 

      UIImage *buttonImage1 = [UIImage imageNamed:@"button.png"]; 
      [myButton1 setBackgroundImage:buttonImage1 forState:UIControlStateNormal]; 
      [self.view addSubview:myButton1]; 

      // Add targets and actions 
      [myButton1 addTarget:self action:@selector(getButtons) forControlEvents:UIControlEventTouchUpOutside]; 
      myButton1.tag = 0; 

      // Button 2 
      myButton2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
      myButton2.tag = 1; 
      // X, y, width, height 
      myButton2.frame = CGRectMake(160, 160, 100.f, 100.f); 

      UIImage *buttonImage2 = [UIImage imageNamed:@"button.png"]; 
      [myButton2 setBackgroundImage:buttonImage2 forState:UIControlStateNormal]; 
      [self.view addSubview:myButton2]; 

      // Add targets and actions 
      [myButton2 addTarget:self action:@selector(getButtons) forControlEvents:UIControlEventTouchUpOutside]; 
      myButton2.tag = 0; 

      // Add to array 
      [buttons addObject:myButton1]; 
      [buttons addObject:myButton2]; 

      break; 
     } 

     case 2: 
      NSLog(@"Where to Stay"); 
      // Create buttons here 
      break; 

     case 3: 
      NSLog(@"Where to Eat"); 
      // Create buttons here 
      break; 

     default: 
      break; 
    } 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"segueToSubNav"]) 
    { 
     // Get reference to the destination view controller 
     SubNavViewController *vc = [segue destinationViewController]; 

     // Pass any objects to the view controller here, like... 
     [vc setMyObjectHere:buttons]; 
    } 
} 
@end 
+0

MainNavView에서 SubNavView의 버튼을 만드는 이유는 무엇입니까? SubNavView가 자체 버튼을 만든다면 더 좋을 것 같습니다. – LuisCien

+0

죄송합니다 위의 EDIT를 참조하십시오. 내가하려고했던 것을 깨달았습니다. – heyred

+0

프로그래밍 방식으로 단 하나의 단추를 추가하는 방법을 먼저 알아냅니다. 그런 다음 더 많은 것을 무작위로 추가하고 첫 번째 패턴을 반복하십시오. 당신은 아마도 "난수"요구에 의해 길을 잃었을 것이고 그것은 당신의 사고 과정을 흐리게 만들 것입니다. 그래서 그 부분을 무시하십시오. –

답변

0

(아래 올드 코드)를 개최합니다 태그를 눌렀습니다. 그런 다음 SubNavView의 인스턴스를 만들 때 해당 속성을 설정하기 전에 설정하십시오. 선택한 태그를 MainNavView의 ivar에 저장해야하므로 선택한 태그를 SubNavView에 설정할 수 있습니다.

SubNavViewController.h 그 후

@interface SubNavViewController : UIViewController 

@property (nonatomic, strong) NSInteger tagSelected; 

// The rest of your class declaration 

@end 

MainNavViewController.m

@interface MainNavViewController() 

// This is the ivar to save the selected tag 
@property (nonatomic, strong) NSInteger tagSelected; 

@end 

@implementation MainNavViewController() 

// Your class code 

-(IBAction)pushButton:(id)sender 
{ 
    int theTag = ((UIView *) sender).tag; 

    // save the tag that was selected for later use 
    sefl.tagSelected = theTag; 

    switch (theTag) 
    { 
     // The rest of your switch here... 
    } 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"segueToSubNav"]) 
    { 
     // Get reference to the destination view controller 
     SubNavViewController *vc = [segue destinationViewController]; 

     // Tell SubNavView which button was pressed... 
     vc.selectedTag = self.selectedTag; 

     // Pass any objects to the view controller here, like... 
     [vc setMyObjectHere:buttons]; 
    } 
} 

@end 

, SubNavViewviewDidLoad가 호출 될 때 당신은 사용할 수 있습니다 여기에

은 예입니다 if-else 절을 사용하여 버튼을 만듭니다.

-(void)viewDidLoad { 

    [super viewDidLoad]; 

    if (self.selectedTag == 1) { 

     //Do something... 
    } 
    else if (self.selectedTag == 2) { 

     //Do something else... 
    } 
    // etc... 
} 

희망이 있습니다.

관련 문제