1

세그먼트 화 된 컨트롤을 구현하는 사용자 정의 라이브러리 (devinross/tapkulibrary)가 있습니다. 이 세분화 된 컨트롤은 기본보기의 하위보기 내에 배치됩니다. 이제 세그먼트 화 된 컨트롤에 대한 컨트롤을 변경하면 새로운 viewcontroller로 변경하고 정확히 동일한 위치에서 세그먼트 된 컨트롤을 다시 그립니다. 그러나 이로 인해 애니메이션 중에 일부 문제가 발생하는 경우가 있습니다.iOS : View를 일정하게 유지하거나 여러 ViewControllers간에보기 전달

새로운 뷰 컨트롤러의 분할 컨트롤 속성을 현재 속성에 할당 할 수 있으므로 다양한 뷰 컨트롤러에서 동일한 세그먼트를 사용할 수 있습니까?

[controller.segmentedView addSubView:self.multiSwitch]; 

이 또한 내가 파단을 사용하고 분할 컨트롤이 변경 될 때이를 표시 할 수 없습니다 있습니다 :

// First.h 
@property (weak, nonatomic) IBOutlet UIView *segmentedView; 
@property (nonatomic, strong) TKMultiSwitch *multiswitch; 
// First.m 
- (void)viewDidLoad { 
    //multiSwitch initializations 
    [self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged]; 
    [self.segmentedView addSubview:self.multiswitch]; 
} 

-(void) changedSegmentedControl:(id)sender { 
    switch(sender.indexOfSelectedItem) 
    { 
    case 1: 
     Second *controller = (Second*)[self.storyboard instantiateViewControllerWithIdentifier:@"secondvc"]; 
     controller.multiswitch = self.multiswitch; 
     break; 
    } 
} 

// Second.h 
@property (weak, nonatomic) IBOutlet UIView *segmentedView; 
@property (nonatomic, strong) TKMultiSwitch *multiswitch; 
// Second.m 
- (void)viewDidLoad { 
    [self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged]; 
    [self.segmentedView addSubview:self.multiswitch]; 
} 
-(void) changedSegmentedControl:(id)sender { 
    switch(sender.indexOfSelectedItem) 
    { 
    case 0: 
     First *controller = (First*)[self.storyboard instantiateViewControllerWithIdentifier:@"firstvc"]; 
     controller.multiswitch = self.multiswitch; 
     break; 
    } 
} 

는 First.m 파일의 switch 섹션에서 case 1:를 들어, 나는 또한 다음하지만 운했습니다. View Controller를 변경해야합니다.

편집 : 비디오 보여주는 어떤 작동하고 무엇을하지 않습니다 (여기에 3 개 섹션가)

이 작업 : https://www.youtube.com/watch?v=lI368z9ntfM

문제 : https://www.youtube.com/watch?v=oTU6tIq5ZW4

+0

어떤 애니메이션 문제가 발생합니까? – mbm29414

+0

이전에 개별 세그먼트 컨트롤을 유지하면서 사용자가 특정 세그먼트 컨트롤을 터치 할 때 SecondH의 viewDidLoad에서 수동으로 인덱스를 선택했습니다. 그러나 사용자가 세그먼트 컨트롤 위에 드래그 (또는 스 와이프)하면 같은 수신기 이벤트 인 UIControlEventValueChanged가 두 번 표시됩니다. – meteors

+0

그럼'UISegmentedControl' 객체가 2 개 있지만 청취자는 1 명 뿐이니? 각 분할 컨트롤에 자체 수신기 (즉, 표시하는보기 컨트롤러)가있을 수 있습니까? – mbm29414

답변

1

이 좋아, 그래서 난 정말 이해할 수 없다 어떻게 그리고 왜 당신이하고 싶은 일을하고 싶은지에 대한 부분. 내가 이해 무슨에서 , 당신은 '먼저'컨트롤러를 숨기고 대신 '둘째'컨트롤러를 보여주고 싶은,하지만 그렇게함으로써, 당신은 '다중 스위치'제어를 해제하고 싶지 않아요. 또한 'First'을 완전히 버리고 필요할 경우 다시 만들고 싶다고 가정합니다.

솔직히 말해서, 나는 당신의 해결책을 정말로 좋아하지 않지만, 당신이 무엇을하려고하는지에 관해 많이 알지 못하기 때문에, 위의 생각에 기초하여 대답을하려고 노력할 것입니다.

두 번째 컨트롤러를 만들기 전에 다음 줄을 추가하십시오. changedSegmentedControl :.

// Remove 'self' as target. You don't want to receive signals in 'First' anymore, because once it will get released you will end up with a crash. 
 
    [self.multiswitch removeTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged]; 
 
// Remove the segmented control from it's superview. It will be added in the 'Second' controller view hierarchy. 
 
    [self.multiswitch removeFromSuperview];

님 이제 설정됩니다. 또한 '두 번째'을 'multiswitch'컨트롤의 대상으로 추가하는 것을 잊지 말아야합니다. 'Second.m'에서 는 방법 '있는 viewDidLoad는'추가 'changedSegmentedControl을 :를'

[self.multiswitch addTarget:self action:@selector(changedSegmentedControl:) forControlEvents:UIControlEventValueChanged];

물론, 당신이 구현해야하는 '둘째'에 게다가.

당신은 대신에 '먼저을'재사용에 더 잘 될 것이다 '둘째'(A '먼저'컨트롤러를 시작하는 대신 '두 번째'당신은 이미 '다중 스위치의 기능을 가질 수 있도록 '통제). 추가 기능이 필요한 경우 'First'을 상속 받고 필요한 추가 코드를 추가하려면 'Second'으로 변경하십시오.

+1

대상을 제거하고 대상을 다시 추가하는 것이 도움이되었습니다. – meteors