2012-11-08 73 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

不知道你在做什麼,可能是你是新的,並學習了一些東西。試着做以下幾點:

在mainViewController

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

更改方法

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

,它應該工作。在這裏也不是非常相關,但你已經在兩個不同的地方拼寫委託和刪除。請注意,它們都將被視爲兩個不同的變量。雖然沒有必要爲同名的實例變量,但我肯定不會有輕微的錯字,因爲它會在以後引發很多問題。

當你爲一個委託定義一個協議時,你在那裏定義的方法應該在委託類中實現。

同樣在你的代碼中,你顯然已經錯過了一些部分,它顯示了你在主視圖控制器中添加contentView的位置。我假設一些,你必須

[self.view addSubview:contentView]; 
在viewDidLoad中還是有些地方

,沒有這些你甚至看不到的內容查看有脫穎而出不能點擊它。

快樂編碼。

+0

對不起,我的錯誤。在我的課堂上,我有正確的拼寫,當我在這裏寫的時候我犯了錯誤。我檢查名稱和passDigit:方法不會被調用。問題在哪裏?我將視圖添加到自定義的cellView中。我想從MainViewController訪問它,它是UITableViewController的子類。我可以看到視圖,並且我認識到觸摸,我測試它,所以代表必須存在問題。 有人可以告訴我你將如何從cellView訪問數據視圖。 –

相關問題