일부 설정 속성이있는 계정이 있습니다. 설정 값은 UISlider
이고 값은 UISwitch
입니다. 응용 프로그램을 실행할 때 올바르게 작동합니다. 왜냐하면 viewDidLoad 메서드가 작동하기 때문에 NSUserDefaults
에서 마지막 값을 표시 할 수 있습니다. 내 응용 프로그램에는 탭 막대 컨트롤러가 있습니다. 그래서 내가 switch와 slider의 값을 얻을 수 있고 viewWillAppear 메소드에서 그것들을 업데이트 할 수 있기 때문에 나는 탭을 바꿀 때 잘 동작합니다. 하지만 내 설정 스위치에서 나는 거기에 사용자 목록이있는보기를 제시하므로 사용자는 어떤 계정을 선택할 수 있습니다. 내가 다시 제시된보기에서 나는 스위치와 슬라이더의 값을 업데이트 할 수 없습니다. 그들의 값을 업데이트하는 방아쇠 방법이 필요합니다. 그것을 할 방법이 있습니까?presentModalViewController에서 돌아올 때 슬라이더와 스위치 값을 업데이트하는 방법은 무엇입니까?
답변
예이 그것을 할 수있는 3 개 사과 방법이다 : 그러나
1) Delegation
2) NSNotificationCenter
3) KVO
를 특정 사건에 대한 모달 뷰를 위임 패턴은 하나의 애플이 권장하고, 내가 추천 할 것입니다 게다가.
다른 2 가지 옵션보다 약간 더 많은 코딩이 필요합니다.
먼저 당신은 당신이 모달 제시하는보기에서 프로토콜을 선언해야 :
in your .h
@protocol MyProtocol;
@interface MyClass : NSObject
@property (nonatomic, weak) id<MyProtocol> delegate;
@end
@protocol MyProtocol <NSObject>
-(void)updateValues:(NSArray *)values;
@end
그런 다음이
myModallyPresentedController.delegate = self;
처럼 간단하게 설정 원본 뷰 컨트롤러에서 모달 위양을 모달보기를 제시하기 전에
그런 다음 제시 컨트롤러가 프로토콜을 채택하도록하십시오.
in your .h
MyPresentingViewController : UIViewController <MyProtocol>
in .m
//Implement method:
-(void)updateValues:(NSArray *)values {
//Update Values.
}
사용자가 "완료"프레스 마지막 때
당신은
[delegate updatedValues:myValues];
를 호출하고 그에 따라 업데이트 할 수 있습니다.
희망이 있습니다.
나는 이것을 얼마 전에 작성했으며 기본적으로이 모든 질문에 붙여 넣습니다. BTW 누구나 쉽게 이해할 수있는 제안을하면/듣기를 좋아합니다.
대리인을 사용하여 클래스간에 정보를 전달할 수 있습니다. 이는 메소드가 사용될 때 정보를 전달하려는 경우에 특히 유용합니다.
Delegates
//In parent .m file:
//assign the delegate
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"segueName"])
{
childController *foo = segue.destinationViewController;
foo.delegate = self;
}
}
//implement protocol method(s):
- (void) methodName:(dataType*) dataName
{
//An example of what you could do if your data was an NSDate
buttonLabel.titleLabel.text = [[date description] substringToIndex:10];
}
//In parent .h file:
//import child header
#import "ChildName.h"
//indicate conformity with protocol
@interface ParentName : UIViewController <ChildNameDelegate>
//In child .h file
//declare protocol
@protocol ChildNameDelegate
- (void) methodName:(dataType*) dataName;
@end
//declare delegate
@property (weak, nonatomic) id<ChildNameDelegate> delegate;
//In child .m file
//synthesize delegate
@synthesize delegate;
//use method
- (IBAction)actionName:(id)sender
{
[delegate methodName:assignedData];
}
왜 dangling-pointer-immune 인'weak'에'unsafe_unretained'을 선호합니까? –
델리게이트 프로토콜 방법은 ARC – Dustin
이전입니다. 그래서 지금은 약한 것을 사용하여 고칠 수있는 역사적인 사고였습니까? –
- 1. gridview에서 값을 업데이트하는 방법은 무엇입니까?
- 2. Phonegap iOS : 멀티 태스킹으로 돌아올 때 콘텐츠를 업데이트하는 방법
- 3. 컨트롤러를 닫을 때 dealloc 메서드가 presentModalViewController에서 호출됩니까
- 4. 동적으로 돌아올 때 RuntimeBinderException이 발생하는 이유는 무엇입니까?
- 5. 탐색에서 돌아올 때 호출되는 메서드는 무엇입니까?
- 6. 아이폰 카메라가 돌아올 때 화면을 전환하는 방법은 무엇입니까?
- 7. 함수에서 돌아올 때 char []를 보호하는 최선의 방법은 무엇입니까?
- 8. 스위치 사용 방법은 무엇입니까?
- 9. 열의 값을 정렬하고 테이블을 업데이트하는 방법은 무엇입니까?
- 10. 정규식을 사용하여 테이블 값을 업데이트하는 방법은 무엇입니까?
- 11. bash3 연관 배열에서 값을 업데이트하는 방법은 무엇입니까?
- 12. jquery를 사용하여 값을 업데이트하는 방법은 무엇입니까?
- 13. 다중 배열 값을 업데이트하는 방법은 무엇입니까?
- 14. CoreData에서 개체 값을 업데이트하는 방법은 무엇입니까?
- 15. 배경에서 돌아올 때 AVCaptureSession이 실패합니다.
- 16. 백그라운드에서 돌아올 때 viewDidLoad가 충돌합니다.
- 17. 사이트로 돌아올 때 팝업 창이 나타납니다
- 18. 모델을 업데이트하는 방법은 무엇입니까?
- 19. 응용 프로그램이 서스펜션에서 돌아올 때 키보드 숨기기
- 20. 엔티티를 업데이트하는 방법은 무엇입니까?
- 21. GridView 현재 편집중인 행의 값을 새로운 행으로 업데이트하는 방법은 무엇입니까?
- 22. 사전 항목을 반복하는 동안 값을 업데이트하는 방법은 무엇입니까?
- 23. 확장 가능한 목록보기 값을 업데이트하는 방법
- 24. MIPS에서 배열을 업데이트하는 방법은 무엇입니까?
- 25. 이벤트 수신기를 통해 현재 항목의 필드 값을 업데이트하는 방법은 무엇입니까?
- 26. 활동에서 Wi-Fi 레벨 값을 업데이트하는 방법은 무엇입니까?
- 27. 여러 개의 슬라이더와 평균
- 28. 조건을 업데이트하는 방법은 무엇입니까?
- 29. NSString을 업데이트하는 방법은 무엇입니까?
- 30. 파일을 업데이트하는 방법은 무엇입니까?
고마워요하지만 가치 appDelegate 개체에 값을 appDelegate.activeAccount.switchValue 및 .sliderValue 이미 있으므로 viewController 내 값을 알고 있어야합니다. 프로그램이 viewDidLoad로 시작될 때 사용자 기본값으로 업데이트 할 수 있습니다. 그러나 제시된 뷰 값에서 돌아올 때 뷰 값을 업데이트 할 방법이 없으므로 값은 변경되지 않습니다. 비록 내가 업데이트 방법을 썼다 고해도. 그런데 이미 내 두 viewController 사이에 위임이 있습니다. –
@ M.SalihKocak 문제를 올바르게 이해하고 있는지 확실하지 않지만 위임이있는 경우 이미 메서드를 만들어서 대리자에게 보냅니다. 또는 NSNotificationCenter를 사용하여 옵저버에게 메시지를 보내 자신을 업데이트 할 수 있습니다. –