2013-08-28 28 views
6

Tôi có ô xem bảng tùy chỉnh và đã tạo một lớp tùy chỉnh. Làm cách nào tôi có thể tham khảo bộ điều khiển xem bảng từ ô?Cách lấy tham chiếu đến Bảng điều khiển xem từ bảng tùy chỉnh Xem lớp di động

Tôi có lớp ô xem bảng tùy chỉnh này. Trong này tôi có một nút được kết nối với một sự kiện tap. Khi nhấn Tôi nhận được sự kiện tốt nhưng tôi đang tìm cách giữ một bộ điều khiển xem bảng để tôi có thể hiển thị bảng tác vụ ở phía trên cùng của chế độ xem bảng.

@interface MTPurchasedCartItemCell : UITableViewCell 

- (IBAction)onShareTap:(id)sender; 

@end 
+0

Bạn sẽ phải cung cấp thêm dữ liệu, thậm chí là mã. Bạn đang cố làm gì vậy? bạn đã làm gì Bạn có ý gì bởi con trỏ? Đối với những gì bạn cần một con trỏ? – CaptJak

+0

Tôi đã thêm một số mã và cập nhật câu hỏi của mình. Cảm ơn. Về cơ bản tôi muốn truy cập vào Table View Controller để tôi có thể hiển thị trang tính hành động vì tôi có một nút bên trong ô xem bảng. –

+0

Mục tiêu của nút nên được đặt thành bộ điều khiển mà bạn đã thiết lập bằng cách tự chuyển mình làm đối số đích trong addTarget: action: forControlEvents: – rdelmar

Trả lời

3

Cách tôi làm điều này sẽ là sử dụng trình xử lý sự kiện chặn. Trong lớp MTPurchasedCartItemCell bạn thêm một tài sản trong file header như sau:

@property (nonatomic, copy) void (^tapHandler)(id sender); 

Và trong file thực hiện, bạn có thể làm điều này:

- (IBAction)onShareTap:(id)sender { 
    if (self.tapHandler) { 
     tapHandler(sender); 
    } 
} 

Và cuối cùng trong lớp điều khiển của bạn, làm một cái gì đó như thế này trong của bạn cellForRowAtIndexPath::

... 
cell.tapHandler = ^(id sender) { 
    // do something 
} 
... 
+1

Như Đức Phật cảnh báo Siddhartha, hãy cẩn thận về việc quá thông minh. [Sử dụng mục tiêu-hành động] (http://stackoverflow.com/a/19608500/242933) là một cách đơn giản hơn để làm điều tương tự. – ma11hew28

-1

Tôi đã thực hiện điều gì đó rất giống với tham chiếu bảng từ ô tùy chỉnh bằng sự kiện nút.

Code:

-(IBAction)onShareTap:(UIButton *)sender { // i've used a button as input.. 

UIButton *senderButton = (UIButton *)sender; 
UITableViewCell *buttonCell = (UITableViewCell *)senderButton.superview.superview.superview; 
UITableView* table = (UITableView *)[buttonCell superview]; 

NSLog(@"Table: %@", table); 
} 
+0

Rất nguy hiểm khi sử dụng 'superview' để tham chiếu đến chế độ xem bảng từ một trong các ô của nó vì chi tiết của hệ thống phân cấp xem là riêng tư và có thể thay đổi trong phiên bản iOS khác. Ngoài ra, @EncorePTL đang hỏi về cách để có được bộ điều khiển xem bảng, không phải là xem bảng. – ma11hew28

2

Bạn cũng có thể cân nhắc thêm một công @property cho nút vào ô tùy chỉnh.

Để làm điều đó, hãy thêm dòng sau vào tập tin header của lớp tế bào tùy chỉnh của bạn:

@property (weak, nonatomic) IBOutlet UIButton *myButton; 

Đó là nếu bạn đang tạo nút trong Interface Builder. Nếu bạn đang tạo nút trong mã, bạn muốn thêm dòng này thay vì:

@property (nonatomic) UIButton *myButton; 

Sau đó, khi khởi tạo hoặc cấu hình các tế bào từ bộ điều khiển xem bảng của bạn, bây giờ bạn có một tham chiếu đến myButton và có thể thêm một hành động với nó với bộ điều khiển xem bảng của bạn làm mục tiêu.

Sau đó, trong phương thức hành động, bạn có thể lấy ô từ nút. Câu trả lời cho Objective-C: How to generate one unique NSInteger from two NSIntegers? giải thích cách thức.

Các vấn đề liên quan