2011-08-16 4 views
5

인터페이스 빌더를 사용하여 툴바를 추가했지만 런타임에/조건에 따라 버튼을 추가해야합니다. 오류는 없지만 내 동적 단추는 도구 모음에 나타나지 않습니다. arrayOfModulesScreens가 필요한 데이터로로드되었는지 확인했습니다. 적어도 그 작품 (:)). 단추를 UIView에 추가 한 다음 해당보기를 도구 모음에 추가해야합니까? 그냥 큰 소리로 생각하고있어. 아마도 더 나은 접근 방법이 있을까요? 해결에 이르는 단서에 미리 감사드립니다.UIToolBar에 프로그래밍 방식으로 UIButton을 추가하는 방법은 무엇입니까?

CustomFormController.h

@interface CustomFormController : UIViewController { 
    UIToolbar *screensBar; 
} 

CustomFormController.m

실제로, 당신은 단지 하나 이상의 UIBarButtonItems를 만들려면 도구 모음에 UIBarButtonItem (안있는 UIButton)를 추가하고자하는 경우
EPData *epData = [[EPData alloc] init]; 
NSArray *screens = [epData loadPlistIntoArray:@"Screens"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"process_module_id == %@", process_modulesID]; 
NSArray *arrayOfModulesScreens = [screens filteredArrayUsingPredicate:predicate]; 

for(int i=0; i < [arrayOfModulesScreens count]; i++) { 
    NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [button setTitle:[dictRow objectForKey:@"screen_title"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [screensBar addSubview:button]; 
} 

답변

8

, 그들을 NSArray (또는 NSMutableArray)에 넣고 해당 배열을 툴바의 items 속성에 지정합니다. 자세한 내용은 the UIBarButtonItem documentation을 참조하십시오. 이런 식으로 뭔가를 보일 수 있습니다 그, 위의 코드를 사용 :

NSMutableArray *items = [NSMutableArray array]; 
    for (int i = 0; i < [arrayOfModulesScreens count]; i++) { 
     NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
     UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(buttonClick:)]; 
     [items addObject:button]; 
     [button release]; 
    } 
    screensBar.items = items; 

(당신은 물론, 다음 buttonClick:을 변경해야하는 대신있는 UIButton의 UIBarButtonItem을 기대합니다). 당신이 정말로 거기에있는 UIButton을 넣어하고자하는 경우

먼저이처럼 UIBarButtonItem에 무언가를있는 UIButton을 포장해야합니다

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 

는 다음과 같은 위의 도구 모음에 항목을 추가 할 수 있습니다.

당신의 버튼이 게시 된 코드에 표시되지 않는 이유에 대해서는

은 문제가있는 UIButton의 buttonWithType: 제로 폭과 제로 높이 버튼을 생성한다는 것입니다. 버튼을 수동으로 또는 제목을 설정 한 후 sizeToFit을 사용하여 크기를 조정하여 표시되도록해야합니다. 이를 수정 한 후에는 부모보기의 왼쪽 위 모서리에있는 단추가 모두 위에 놓이는 것을 볼 수 있습니다. 적절한 위치에 수동으로 배치해야합니다.

+1

매력처럼 작동했습니다. 너희들은 놀라워! – iamtoc

+0

이미지가 보이지 않는 이유는 완벽합니다.좋은 대안을 제공하는 것뿐만 아니라 그것에 감탄 해 주셔서 감사합니다. – iamtoc

1

코드에서 직접 navigationController을 변경할 수 있다고 생각하지 않습니다.

더 안전한 방법이 될 것이다 : UIToolBar-UIButton이 버튼의 버튼 및 위치의 폭 추가로

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                  style:UIBarButtonItemStyleBordered 
                  target:self 
                  action:@selector(buttonClick:)]; 
self.navigationItem.rightBarButtonItem = button; 
1

툴바 접근

한가지 문제점은

제어가 곤란

단순한 접근

도구 모음을 제거하고 도구 모음과 동일한 배경 이미지로 UIView을 배치하십시오. 이제 해당 뷰에 하위 뷰로 UIButton을 추가 할 수 있습니다. 이 방법을 사용하면 버튼의 위치와 너비를보다 효과적으로 제어 할 수 있습니다. 또한 다른보기도 추가 할 수 있습니다.

관련 문제