2011-08-18 8 views
2

Interface Builder에서 몇 가지 정적 UILabel 텍스트를 만들었지 만 응용 프로그램을 실행할 때. 레이블은 응용 프로그램 자체에 표시되지 않습니다. 이유는 모르겠습니다.정적 UILabel이 uiview에 표시되지 않습니다.

텍스트 필드와 같은 다른 모든 것들, 레이블을 제외한 버튼은 작동하지 않습니다. 아무도 나에게 잘못을 알리는 사람이 있습니까?

는 IB에서이 응용 프로그램에

enter image description here

enter image description here

enter image description here

#import "SettingsViewController.h" 

@implementation SettingsViewController 

@synthesize drinkLimitText; 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

    appDelegate = (DrinkTabsAndNavAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [super viewDidLoad]; 

    NSLog(@"subView:%d",[self.view.subviews count]); 
} 


- (void) viewWillAppear:(BOOL)animated { 


    if ([appDelegate.drinkLimit floatValue] >= 0) 
     drinkLimitText.text = [NSString stringWithFormat:@"%.0f", [appDelegate.drinkLimit floatValue]]; 
    else 
     drinkLimitText.text = @"0"; 

    [super viewWillAppear:animated]; 
} 

- (IBAction)textFieldDoneEditing:(id)sender{ 
    NSDecimalNumber *tempValue = [[NSDecimalNumber alloc] initWithString:drinkLimitText.text]; 
    if (tempValue == [NSDecimalNumber notANumber] || [tempValue doubleValue] < 0) { 
     NSString *msg = [[NSString alloc] initWithFormat: @"Make sure to enter a positive number."]; 
     UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:@"Hang on..." 
           message:msg 
           delegate:self 
           cancelButtonTitle:@"Ok" 
           otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
     [msg release]; 
    } else { 
     [sender resignFirstResponder]; 
     [self updateDrinkLimit]; 
    } 
    [tempValue release]; 
} 

- (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. 
} 

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

- (void)updateDrinkLimit { 

    NSDecimalNumber *newLimit = [[NSDecimalNumber alloc] initWithString:[drinkLimitText text]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([newLimit floatValue] >= 0) { 
     [defaults setFloat:[newLimit floatValue] forKey:kDrinkLimitKey]; 
     appDelegate.drinkLimit = newLimit; 
    } else { 
     [defaults setFloat:0 forKey:kDrinkLimitKey]; 
     appDelegate.drinkLimit = 0; 
    } 
    [newLimit release]; 
} 

- (IBAction)openOntrackWebsite { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.ontrack.org.au/"]]; 
} 

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [drinkLimitText release]; 

    [super dealloc]; 
} 

@end 

답변

5

Clean 프로젝트 및 0123입니다다시.

이것은 Xcode에서 가장 일반적인 문제 중 하나입니다.

+0

이미 내 프로젝트 파일을 모두 지우고 같은 문제가 여전히 발생합니다 – Desmond

+0

그런 다음보기에 레이블이 제대로 추가되었는지 확인하십시오. – Devang

+0

확인, 여전히 작동하지 않습니다. IBOutlet과 연결된 2 개의 whown, 나머지는 static, 체크 된 색상은 흰색이 아닙니다. – Desmond

1

프로젝트를 저장했는지 확인하십시오. 코드를 addSubView했는지 확인하십시오. 실행 후 깨끗하고 ...이

이 도움이 되었으면 좋겠 문제 ....

+0

아니요, 내가보기에 추가 된 항목과 상관없이 모든 addSubView 명령이 하나 있는데 재미 있습니다. 텍스트 필드를 제외하고 아무것도 표시되지 않습니다. – Desmond

1

인터페이스 빌더의 계층 구조는 다음과 같이해야합니다으로 해결할 수 :

UIView 
    --- Label 
    --- TextField 
    --- Label 
    --- UIButton 

을 나는 그것을 의심 다음과 같습니다 :

UIView 
    --- Label 
    --- UIButton 
Label 
Label 
1

이 xib 예제는 MainWindow 또는 ViewController의 탭 막대 항목입니까? 또한 View Controller 속성의 NIB 이름을 보통 SettingsViewController (xib 파일의 이름)라고하는 이름으로 변경하는 것을 잊지 않았습니까? Xcode를 사용하여 클래스를 만든 경우 일반적으로 생성되는 이름입니다. 스크린 샷에서 '설정'에서보기 '가 표시되는데 이는 정확하지 않을 수 있습니다.

+0

안녕하세요 macboy, xib 예제는 기본 창에서, 설정은 내가 이름을 바꾸는 이름입니다. setViewController – Desmond

2

제 제한이 제대로 설정되지 않았습니다. 너비 및 높이 구속 조건을 설정하고 누락 된 구속 조건을 추가하려면 해당 삼각형 구속 조건 버튼을 클릭하십시오.

제약 조건을 수정 한 후에 나타납니다.

관련 문제