2012-11-08 2 views
-1

하위 클래스 UITableViewController 및 내부 테이블에 사용자 지정 셀이 있습니다. 그리고이 사용자 정의 셀은 UIView 내부를 서브 클래 싱했습니다. 따라서이 UIView는 자체 클래스로 작성됩니다. 내 코드에서 UITableViewController 클래스의 이름은 MainViewController.h/.m이고 UIView의 클래스 이름은 ContentView.h/.m입니다. 따라서 ContentView에서 이미지와 tapGestureRecognizer를 추가했습니다. 이미지가 도청 될 때까지 날짜 (이 경우 숫자)가 MainViewController로 전송됩니다. 첫 번째 문제는 위임 메서드가 호출되지 않는다는 것입니다. 그리고 그것을 notificationCenter로 호출하면 0.00000로 기록됩니다. 셀 안의 뷰에서 ViewController로 데이터를 전달할 수 있습니까? 숫자 또는 데이터를 서브 클래 싱 된 UIView에서 UIViewController로 전달하는 방법?

내 코드입니다 :

ContentView.h :

@class ContentView; 
@protocol ContentViewDelegate 
- (void)passDigit:(float)someDigit; 
@end 

#import <UIKit/UIKit.h> 
#import "MainViewController.h" 

@interface ContentView : UIView 
{ 
    id <ContentViewDelegate> delegate; 
    float someDigit; 
} 

@property float someDigit; 
@property (assign) id <ContentViewDelegate> delegate; 

@end 

ContentView.m

#import "ContentView.h" 


@implementation ContentView 
@synthesize someDigit; 
@synthesize delegate; 

- (void)handleContentTouch:(UIGestureRecognizer *)gesture 
{ 
    someDigit = 134; 
    [self.delegate passDigit:someDigit]; 
} 

- (void)setupView 
{ 
    CGRect frame = self.frame; 


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleContentTouch:)]; 
    UIImageView *fifthBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)]; 
    [self addSubview:fifthBackground]; 
    [fifthBackground setUserInteractionEnabled:YES]; 
    [fifthBackground addGestureRecognizer:tap]; 
} 

MainViewController.h

#import <UIKit/UIKit.h> 
#import "ContentView.h" 

@interface MainViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate, ContentViewDelegate> 
@end 

MainViewContorller.m

#import "MainViewController.h" 

@implementation MainViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ContentView *contentView = [[ContentView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]; 
    contentView.delegate = self; 
} 

- (void) passDigit:(float)someDigit 
{ 
    NSLog(@"%f",someDigit); 
} 
+1

왜 마지막 질문을 업데이트하지 않으셨습니까? – rmaddy

+0

내가 바꿨 기 때문에. 여기서는 알림 센터를 사용하지 않습니다. –

+0

정말로 변경하지 않았습니다. 당신은 방금 일부 텍스트를 제거했습니다 ... – pasawaya

답변

0

당신이하려고하는 것이 확실하지 않거나, 새로운 것이고 어떤 것을 배울 수 있습니다.

- (void)passDigit:(float)someDigit 
{ 
    NSLog(@"%f",someDigit); 
} 

- (void) showDetailViewControllerWithDigit:(float)someDigit 
{ 
    NSLog(@"%f",someDigit); 
} 

mainViewController

에 당신의 방법을 변경

와 그것을 작동합니다 : 다음을 수행하십시오. 여기에도별로 관련이 없지만 두 곳에서 대리인과 탈퇴자를 철자했습니다. 둘 다 두 개의 다른 변수로 간주됩니다. 동일한 이름을 가진 인스턴스 변수를 가질 필요는 없지만 나중에 많은 문제가 발생할 것이기 때문에 약간의 오타가 있어서는 안됩니다.

대리인에 대한 프로토콜을 정의 할 때 정의 된 메서드는 대리자 클래스에 구현되어야합니다.

또한 코드에서 주 뷰 컨트롤러에 contentView를 추가하는 위치를 표시하는 일부 부품을 놓친 것 같습니다. 나는 어떤 위치를 당신도있는 contentView를 볼 수있는없이 viewDidLoad에 또는 어떤 곳에서

[self.view addSubview:contentView]; 

을 가지고 거기에 이물이 그것을 탭 할 수없는 것을 가정하고있다.

해피 코딩.

+0

실수로 죄송합니다. 내 수업에서는 올바른 철자법을 사용하며, 여기에 쓴 것은 실수입니다. 나는 이름을 검사하고 passDigit : 메서드는 호출되지 않는다. 문제가 어디 있니? View가 사용자 정의 cellView에 추가되었습니다.그리고 MainViewController, UITableViewController 하위 클래스에서 액세스 할 싶습니다. 보기를 볼 수 있으며 터치를 인식하고 있으므로 테스트하여 대리인에게 문제가 발생해야합니다. cellView에서 데이터에 액세스하는 방법을 누군가에게 알려줄 수 있습니까? –