문제

iPhone 개발에 대해 더 많이 배우려는 끝없는 노력으로 Apples Developer 웹 사이트를 통해 사용할 수있는 소스 코드를 가지고 놀았습니다. 내가 작업하는 특정 예는 핵심 데이터 북입니다. 여기. 세부 사항 ViewController 및 AddViewController는 XIB 파일이 없기 때문에 프로그래밍 방식으로 만들어집니다. 제 질문은 IB를 사용하지 않고보기에 프로그램 적으로 추가하는 것입니다. 세부 사항에 특정 책에 대한 자세한 정보가있는 uitableview 아래에 Uiswitch를 넣고 싶습니다. 어떻게해야합니까? 이것이 내가 지금까지 시도한 것입니다.

AddViewController에서 Uiswitch를 설정합니다.

@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;

 }

@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;

나는 또한 iBaction을 설정합니다.

- (IBAction)flip:(id)sender;

그런 다음 addViewController.m 파일에서 합성하지만 아무 일도 일어나지 않습니다. 설정 한 IBACTION에서 수행하는 작업을 제어 할 수 있도록 스위치를 설정하고 설정하면됩니다. 나는 이것이 창피하게 단순하다는 것을 알고 있지만, 나는 그것을 알아낼 수 없습니다. 따라서 모든 도움이 감사하겠습니다! 감사

편집 1

그래서 ViewDidload에서 지시 된대로 코드를 구현했습니다.

   - (void)viewDidLoad {

[super viewDidLoad];    
  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];

그리고 'Onoff'라는 로컬 선언이 인스턴스 변수를 숨긴다는 두 가지 경고를합니다. 그러나 그 수입이 있지만 Uiswitch는 잘 팝업되지만, 움직이거나 사용하면 완전히 작동하는 것처럼 보이지 않습니다. 다음과 같이 보이는 내 행동을 위해 :

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

스위치가 켜져있을 때마다 콘솔이 켜져 있고 꺼지면 콘솔이 꺼져 있어야합니다. 오른쪽? 움직일 때마다 콘솔에서 반복됩니다. 켜져 있거나 꺼지면 꺼져있는 경우에만 나타납니다. 세상에서 내가 뭘 잘못하고 있습니까? 도와주세요! 감사

도움이 되었습니까?

해결책

컴파일러가 당신을 도와 주려고합니다. 당신은 당신의 Onoff 인스턴스 변수를 무시하고 있습니다 viewDidLoad; 따라서 그것은 결코 설정되지 않습니다. -flip : method에서는 nil 컨트롤러를 참조하고 있습니다. 이것을 고치는 두 가지 방법이 있습니다.

(a) Onoff의 로컬 선언을 제거하고 인스턴스 변수를 사용하십시오.

(b) 발신자 주장을 -flip에 캐스트 : UISwitch, 그리고 그 액세스 :

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}

다른 팁

스티브, 질문을 오해하면 죄송합니다. 당신은 실제로 만들었습니까? UISwitch 뷰 계층에 추가 하시겠습니까? 당신의 컨트롤러 -loadView 또는 -viewDidLoad 구현에는 다음과 같은 코드가 있어야합니다.

// Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top