Nhận nút bấm bên trong UITableViewCell


140

Tôi có một bộ điều khiển xem với chế độ xem bảng và một ngòi riêng cho mẫu ô của bảng. Mẫu ô có một số nút. Tôi muốn truy cập vào nút bấm cùng với chỉ mục của ô được nhấp bên trong trình điều khiển khung nhìn nơi tôi đã xác định chế độ xem Bảng.

Vì vậy, tôi có ViewController.hViewController.mnơi tôi có UITableViewTableTemplate.h, TableTemplate.mTableTemplate.xibnơi tôi có ngòi xác định. Tôi muốn sự kiện nhấn nút với chỉ số di động ViewController.m.

Bất kỳ trợ giúp về làm thế nào tôi có thể làm điều đó?

Câu trả lời:


258

1) Trong cellForRowAtIndexPath:phương thức của bạn , gán thẻ nút làm chỉ mục:

cell.yourbutton.tag = indexPath.row;

2) Thêm mục tiêu và hành động cho nút của bạn như dưới đây:

[cell.yourbutton addTarget:self action:@selector(yourButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

3) Các hành động mã dựa trên chỉ mục như dưới đây trong ViewControler:

-(void)yourButtonClicked:(UIButton*)sender
{
     if (sender.tag == 0) 
     {
         // Your code here
     }
}

Cập nhật cho nhiều Phần:

Bạn có thể kiểm tra liên kết này để phát hiện nhấp vào nút trong chế độ xem bảng cho nhiều hàng và phần.


1
Điều này cũng có thể được thực hiện thông qua Trình tạo giao diện (IB) trong bước hai. Chỉ cần đảm bảo thẻ nút của bạn được đặt. Bạn thực sự không muốn trộn lẫn kêu gọi hành động của bạn. Hoặc làm điều đó thông qua IB hoặc làm rõ ràng trong mã của bạn.
Sententia

@Mani Nó không phá vỡ MVC - hành động nằm trong TableView chứ không phải Cell.
davecom

@davecom Nếu bạn đặt mục tiêu nút là ô (thông qua IB), làm thế nào nó sẽ được kích hoạt từ bảngView? Hoặc có cách nào để kết nối mục tiêu nút với chế độ xem bảng được đặt trong xib của ô không?
Mani

24
Giải pháp này gặp vấn đề khi bạn bắt đầu chèn và xóa hàng. Thẻ không được cập nhật khi hàng được dịch chuyển. Thay vì giữ một tham chiếu đến hàng. Có thể tốt hơn để giữ một tham chiếu đến một id đối tượng duy nhất.
Vincent Cheong

1
Bất cứ khi nào bạn thấy mình gán giá trị cho các thuộc tính thẻ của chế độ xem, bạn có mùi mã rất tệ có thể cắn bạn sau này. Tìm kiếm những cách tốt hơn để đạt được mục tiêu của bạn, không phải là bài viết SO đầu tiên bạn tìm thấy.
TigerCoding

148

Đại biểu là con đường để đi.

Như đã thấy với các câu trả lời khác sử dụng lượt xem có thể bị lỗi thời. Ai biết được ngày mai có thể có một trình bao bọc khác và có thể cần phải sử dụng cell superview]superview]superview]superview]. Và nếu bạn sử dụng các thẻ, bạn sẽ kết thúc với số n nếu có điều kiện khác để xác định ô. Để tránh tất cả các thiết lập đại biểu.(Bằng cách làm như vậy, bạn sẽ tạo ra một lớp ô có thể sử dụng lại. Bạn có thể sử dụng cùng một lớp ô như một lớp cơ sở và tất cả những gì bạn phải làm là thực hiện các phương thức ủy nhiệm.)

Đầu tiên chúng ta cần một giao diện (giao thức) sẽ được sử dụng bởi các tế bào để giao tiếp (nút ủy nhiệm). ( Bạn có thể tạo một tệp .h riêng cho giao thức và bao gồm trong cả trình điều khiển xem bảng và các lớp ô tùy chỉnh HOẶC chỉ cần thêm nó vào lớp ô tùy chỉnh mà dù sao cũng sẽ được bao gồm trong trình điều khiển xem bảng )

@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end

Bao gồm giao thức này trong bộ điều khiển xem bảng và ô tùy chỉnh. Và đảm bảo bộ điều khiển xem bảng xác nhận giao thức này.

Trong ô tùy chỉnh tạo hai thuộc tính:

@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;

Trong UIButtonIBAction, nhấp vào đại biểu: ( Có thể được thực hiện tương tự cho bất kỳ hành động nào trong lớp ô tùy chỉnh cần được ủy quyền trở lại để xem trình điều khiển )

- (IBAction)buttonClicked:(UIButton *)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
        [self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
    }
}

Trong bộ điều khiển xem bảng cellForRowAtIndexPathsau khi bỏ qua ô, đặt các thuộc tính trên.

cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.

Và thực hiện ủy nhiệm trong trình điều khiển xem bảng:

- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
    // Do additional actions as required.
    NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}

Đây sẽ là cách tiếp cận lý tưởng để có được các hành động nút ô tùy chỉnh trong trình điều khiển xem bảng.


2
Tại sao bạn đã làm cho đại biểu một tài sản mạnh mẽ của tế bào? Điều này sẽ cung cấp cho bạn một chu kỳ giữ lại, trừ khi bạn biết bộ điều khiển chỉ giữ tế bào yếu.
JulianSymes

Điều gì về _cell Index beign được cập nhật sau khi ô bị xóa?
skornos 7/03/2015

2
Tôi đã nghe một người bạn của tôi nói rằng việc sử dụng ủy nhiệm trên mỗi ô gây ra tiêu thụ bộ nhớ, vì vậy hãy sử dụng thẻ. Điều này có đúng không?
Bista

2
kiểm tra câu hỏi này anh chàng stackoverflow.com/questions/31649220/
Kiếm

@the_UB Không thể có nhiều giữa việc đặt thẻ và lưu trữ một tham chiếu. Có thể một thẻ sẽ chiếm nhiều bộ nhớ hơn.
Ian Warburton

66

Thay vì chơi với các thẻ, tôi đã thực hiện các cách tiếp cận khác nhau. Đã ủy nhiệm cho lớp con UITableViewCell của tôi (OptionButtonsCell) và thêm một varPath var. Từ nút của tôi trong bảng phân cảnh, tôi đã kết nối @IBAction với OptionButtonsCell và ở đó tôi gửi phương thức ủy nhiệm với indexPath phù hợp cho bất kỳ ai quan tâm. Trong ô cho đường dẫn chỉ mục, tôi đặt indexPath hiện tại và nó hoạt động :)

Hãy để mã tự nói:

Swift 3 Xcode 8

Tùy chọnButtonsTableViewCell.swift

import UIKit
protocol OptionButtonsDelegate{
    func closeFriendsTapped(at index:IndexPath)
}
class OptionButtonsTableViewCell: UITableViewCell {
    var delegate:OptionButtonsDelegate!
    @IBOutlet weak var closeFriendsBtn: UIButton!
    var indexPath:IndexPath!
    @IBAction func closeFriendsAction(_ sender: UIButton) {
        self.delegate?.closeFriendsTapped(at: indexPath)
    }
}

MyTableViewControll.swift

class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, OptionButtonsDelegate {...

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "optionCell") as! OptionButtonsTableViewCell
    cell.delegate = self
    cell.indexPath = indexPath
    return cell   
}

func closeFriendsTapped(at index: IndexPath) {
     print("button tapped at index:\(index)")
}

bạn có thể giúp tôi không, tôi đang gặp lỗi ở dòng này: class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, OptionButtonsDelegate // error: Sự tuân thủ dự phòng của 'MyTableViewContoder' với giao thức 'UITableViewDataSource'
Ulug'bek Ro'zimboyev

có vẻ như bạn đang cố gắng tuân thủ UITableViewDataSource nhiều lần. Có lẽ bạn đã có một tiện ích mở rộng nơi bạn đã tuân thủ nguồn dữ liệu?, Không thể giúp nhiều hơn mà không cần mã
Maciej Chrzastek

1
và làm thế nào để truyền dữ liệu để thực hiện segue và đi đến một bộ điều khiển xem khác?
Milad Faridnia

2
Giải pháp tốt nhất và sạch nhất!
ứng dụng

31

Điều này sẽ giúp: -

UITableViewCell* cell = (UITableViewCell*)[sender superview];
NSIndexPath* indexPath = [myTableView indexPathForCell:cell];

Ở đây người gửi là đối tượng UIButton đang gửi sự kiện. myTableView là phiên bản UITableView mà bạn đang xử lý.

Chỉ cần có được tham chiếu ô đúng và tất cả các công việc được thực hiện.

Bạn có thể cần xóa các nút khỏi nội dung của ô Xem & thêm chúng trực tiếp vào phiên bản UITableViewCell khi nó là phụ.

Hoặc là

Bạn có thể xây dựng sơ đồ đặt tên thẻ cho các UIButton khác nhau trong cell.contentView. Sử dụng thẻ này, sau này bạn có thể biết thông tin hàng & phần nếu cần.


4
nó phải là [[người gửi giám sát] giám sát];
pierre23

2
Điều này là tốt cho các tế bào rất đơn giản. Tuy nhiên, nếu tế bào của bạn có một cây quan điểm sâu thì câu trả lời của Man là tốt nhất.
Sententia

3
Bây giờ trong iOS 7, nó phải là UITableViewCell * cell = (UITableViewCell *) [[[sender giám sát] giám sát] giám sát]; Cảm ơn bạn.
Rajan Maharjan

kiểm tra câu hỏi này anh chàng stackoverflow.com/questions/31649220/
Kiếm

22

Mã sau có thể giúp bạn.

Tôi đã thực hiện UITableViewvới lớp tế bào nguyên mẫu tùy chỉnh có tên UITableViewCellbên trongUIViewController .

Vì vậy, tôi có ViewController.h, ViewController.mTableViewCell.h,TableViewCell.m

Đây là mã cho điều đó:

ViewController.h

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@property (strong, nonatomic) IBOutlet UITableView *tblView;

@end

ViewController.m

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return (YourNumberOfRows);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *cellIdentifier = @"cell";

    __weak TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (indexPath.row==0) {
        [cell setDidTapButtonBlock:^(id sender)
         {
             // Your code here

         }];
    }    
    return cell;
}

Lớp ô tùy chỉnh:

TableViewCell.h

@interface TableViewCell : UITableViewCell

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

@property (strong, nonatomic) IBOutlet UILabel *lblTitle;
@property (strong, nonatomic) IBOutlet UIButton *btnAction;

- (void)setDidTapButtonBlock:(void (^)(id sender))didTapButtonBlock;

@end

UITableViewCell.m

@implementation TableViewCell

- (void)awakeFromNib {
    // Initialization code
    [self.btnAction addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}
- (void)didTapButton:(id)sender {
    if (self.didTapButtonBlock)
    {
        self.didTapButtonBlock(sender);
    }
}

Lưu ý : Ở đây tôi đã thực hiện tất cả UIControlsbằng cách sử dụng Storyboard.

Hy vọng có thể giúp bạn...!!!


Cách tốt nhất từng có
Daniel Raouf

15

Lý do tôi thích kỹ thuật dưới đây vì nó cũng giúp tôi xác định phần của bảng.

Thêm nút trong ô di độngForRowAtIndexPath:

 UIButton *selectTaskBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [selectTaskBtn setFrame:CGRectMake(15, 5, 30, 30.0)];
        [selectTaskBtn setTag:indexPath.section]; //Not required but may find useful if you need only section or row (indexpath.row) as suggested by MR.Tarun 
    [selectTaskBtn addTarget:self action:@selector(addTask:)   forControlEvents:UIControlEventTouchDown];
[cell addsubview: selectTaskBtn];

AddTask sự kiện:

-(void)addTask:(UIButton*)btn
{
    CGPoint buttonPosition = [btn convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
    if (indexPath != nil)
    {
     int currentIndex = indexPath.row;
     int tableSection = indexPath.section;
    }
}

Hy vọng sự giúp đỡ này.


kiểm tra câu hỏi này anh chàng stackoverflow.com/questions/31649220/
Kiếm

12

Sử dụng Swift đóng cửa:

class TheCell: UITableViewCell {

    var tapCallback: (() -> Void)?

    @IBAction func didTap(_ sender: Any) {
        tapCallback?()
    }
}

extension TheController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: TheCell.identifier, for: indexPath) as! TheCell {
            cell.tapCallback = {
                //do stuff
            }
            return cell
    }
}

7

Mã của Tarun không hoạt động trên iOS7, vì cấu trúc UITableViewCell đã thay đổi và bây giờ anh ta sẽ nhận được "UITableViewCellScrollView".

Bài đăng này Nhận UITableViewCell với giám sát trong iOS 7 có một giải pháp tốt tạo vòng lặp để tìm chế độ xem chính xác, bất kể thay đổi nào trong cấu trúc trong tương lai. Nó sôi sùng sục để tạo ra một vòng lặp:

    UIView *superView = [sender superview];
    UIView *foundSuperView = nil;

    while (nil != superView && nil == foundSuperView) {
        if ([superView isKindOfClass:[UITableViewCell class]]) {
            foundSuperView = superView;
        } else {
            superView = superView.superview;
        }
    }

Liên kết có mã cho một giải pháp tái sử dụng nhiều hơn, nhưng điều này sẽ hoạt động.


6

Swift 2.2

Bạn cần thêm mục tiêu cho nút đó.

myButton.addTarget(self, action: #selector(ClassName.FunctionName(_:), forControlEvents: .TouchUpInside)

FunctionName: được kết nối // chẳng hạn

Và tất nhiên bạn cần đặt thẻ của nút đó vì bạn đang sử dụng nó.

myButton.tag = indexPath.row

Bạn có thể đạt được điều này bằng cách phân lớp UITableViewCell. Sử dụng nó trong trình tạo giao diện, thả một nút trên ô đó, kết nối nó qua ổ cắm và bạn đến đó.

Để lấy thẻ trong chức năng được kết nối:

func connected(sender: UIButton) {
    let buttonTag = sender.tag
    // Do any additional setup
}

6

Swift 3 với một đóng cửa

Một giải pháp hay là sử dụng bao đóng trong UITableViewCell tùy chỉnh để gọi lại cho viewContoder cho một hành động.

Trong tế bào:

final class YourCustomCell: UITableViewCell {

    var callbackClosure: (() -> Void)?

    // Configure the cell here
    func configure(object: Object, callbackClosure: (() -> Void)?) {
       self.callbackClosure = callbackClosure
    }


// MARK: - IBAction
extension YourCustomCell {
    @IBAction fileprivate func actionPressed(_ sender: Any) {
        guard let closure = callbackClosure else { return }
        closure()
    }
}

Trong Trình điều khiển xem: Đại biểu Tableview

extension YourViewController: UITableViewDelegate {

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        guard let cell: YourCustomCell = cell as? YourCustomCell else { return }
        cell.configure(object: object, callbackClosure: { [weak self] in
            self?.buttonAction()
        })
     }
 }

fileprivate extension YourViewController {

    func buttonAction() {
        // do your actions here 
    }
}

5

Tôi thấy đơn giản nhất để phân lớp nút bên trong ô của bạn (Swift 3):

class MyCellInfoButton: UIButton {
    var indexPath: IndexPath?
}

Trong lớp tế bào của bạn:

class MyCell: UICollectionViewCell {
    @IBOutlet weak var infoButton: MyCellInfoButton!
   ...
}

Trong nguồn dữ liệu của chế độ xem bảng hoặc bộ sưu tập, khi sắp xếp lại ô, cung cấp cho nút đường dẫn chỉ mục của nó:

cell.infoButton.indexPath = indexPath

Vì vậy, bạn chỉ có thể đặt các mã này vào trình điều khiển xem bảng của mình:

@IBAction func handleTapOnCellInfoButton(_ sender: MyCellInfoButton) {
        print(sender.indexPath!) // Do whatever you want with the index path!
}

Và đừng quên đặt lớp của nút trong Trình tạo giao diện của bạn và liên kết nó với handleTapOnCellInfoButtonchức năng!


đã chỉnh sửa:

Sử dụng tiêm phụ thuộc. Để thiết lập gọi đóng cửa:

class MyCell: UICollectionViewCell {
    var someFunction: (() -> Void)?
    ...
    @IBAction func didTapInfoButton() {
        someFunction?()
    }
}

và tiêm đóng cửa trong phương thức willDisplay của đại biểu của chế độ xem bộ sưu tập:

 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    (cell as? MyCell)?.someFunction = {
        print(indexPath) // Do something with the indexPath.
    }
}

Cách tiếp cận đóng cửa là cách Swifty nhất mà tôi từng thấy để làm điều này. Công việc tốt đẹp!
Clifton Labrum

5

Nó làm việc cho tôi.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     UIButton *Btn_Play = (UIButton *)[cell viewWithTag:101];
     [Btn_Play addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)ButtonClicked:(UIButton*)sender {
     CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.Tbl_Name];
     NSIndexPath *indexPath = [self.Tbl_Name indexPathForRowAtPoint:buttonPosition];
}

1
// Add action in cell for row at index path -tableView

cell.buttonName.addTarget(self, action: #selector(ViewController.btnAction(_:)), for: .touchUpInside)

// Button Action

  @objc func btnAction(_ sender: AnyObject) {



        var position: CGPoint = sender.convert(.zero, to: self.tableView)


        let indexPath = self.tableView.indexPathForRow(at: position)
        let cell: UITableViewCell = tableView.cellForRow(at: indexPath!)! as
        UITableViewCell




}

1

cho nhanh 4:

inside the cellForItemAt ,
   
cell.chekbx.addTarget(self, action: #selector(methodname), for: .touchUpInside)

then outside of cellForItemAt
@objc func methodname()
{
//your function code
}


1

Nếu bạn muốn truyền giá trị tham số từ ô cho UIViewContoder bằng cách sử dụng bao đóng

//Your Cell Class
class TheCell: UITableViewCell {

    var callBackBlockWithParam: ((String) -> ()) = {_ in }

//Your Action on button
    @IBAction func didTap(_ sender: Any) {
        callBackBlockWithParam("Your Required Parameter like you can send button as sender or anything just change parameter type. Here I am passing string")
    }
}

//Your Controller
extension TheController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: TheCell.identifier, for: indexPath) as! TheCell {
            cell.callBackBlockWithParam = { (passedParamter) in 

             //you will get string value from cell class
                print(passedParamter)     
      }
            return cell
    }
}

0

Câu trả lời @Mani là tốt, tuy nhiên các thẻ lượt xem bên trong nội dung của ô thường được sử dụng cho các mục đích khác. Bạn có thể sử dụng thẻ của ô thay thế (hoặc thẻ contentView của ô):

1) Trong cellForRowAtIndexPath:phương thức của bạn , gán thẻ của ô là chỉ mục:

cell.tag = indexPath.row; // or cell.contentView.tag...

2) Thêm mục tiêu và hành động cho nút của bạn như dưới đây:

[cell.yourbutton addTarget:self action:@selector(yourButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

3) Tạo phương thức trả về hàng của người gửi (cảm ơn @Stenio Ferreira):

- (NSInteger)rowOfSender:(id)sender
{
    UIView *superView = sender.superview;
    while (superView) {
        if ([superView isKindOfClass:[UITableViewCell class]])
            break;
        else
            superView = superView.superview;
    }

    return superView.tag;
}

4) Các hành động mã dựa trên chỉ mục:

-(void)yourButtonClicked:(UIButton*)sender
{
     NSInteger index = [self rowOfSender:sender];
     // Your code here
}

0

CustomTableCell.h là một UITableViewCell:

@property (weak, nonatomic) IBOutlet UIButton *action1Button;
@property (weak, nonatomic) IBOutlet UIButton *action2Button;

MyVC.m sau khi nhập khẩu:

@interface MYTapGestureRecognizer : UITapGestureRecognizer
@property (nonatomic) NSInteger dataint;
@end

Bên trong "cellForRowAtIndexPath" trong MyVC.m:

//CustomTableCell 
CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

//Set title buttons
[cell.action1Button setTitle:[NSString stringWithString:NSLocalizedString(@"action1", nil)] forState:UIControlStateNormal];
[cell.action2Button setTitle:[NSString stringWithString:NSLocalizedString(@"action2", nil)] forState:UIControlStateNormal];

//Set visibility buttons
[cell.action1Button setHidden:FALSE];
[cell.action2Button setHidden:FALSE];

//Do 1 action
[cell.action1Button addTarget:self action:@selector(do1Action :) forControlEvents:UIControlEventTouchUpInside];

//Do 2 action
MYTapGestureRecognizer *action2Tap = [[MYTapGestureRecognizer alloc] initWithTarget:self action:@selector(do2Action :)];
cancelTap.numberOfTapsRequired = 1;
cancelTap.dataint = indexPath.row;
[cell.action2Button setUserInteractionEnabled:YES];
[cell.action2Button addGestureRecognizer:action2Tap];

MyVC.m:

-(void)do1Action :(id)sender{
//do some action that is not necessary fr data
}

-(void)do2Action :(UITapGestureRecognizer *)tapRecognizer{
MYTapGestureRecognizer *tap = (MYTapGestureRecognizer *)tapRecognizer;
numberTag = tap.dataint;
FriendRequest *fr = [_list objectAtIndex:numberTag];

//connect with a WS o do some action with fr data

//actualize list in tableView
 [self.myTableView reloadData];
}

-1
cell.show.tag=indexPath.row;
     [cell.show addTarget:self action:@selector(showdata:) forControlEvents:UIControlEventTouchUpInside];

-(IBAction)showdata:(id)sender
{
    UIButton *button = (UIButton *)sender;

    UIStoryboard *storyBoard;
    storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SecondViewController *detailView = [storyBoard instantiateViewControllerWithIdentifier:@"SecondViewController"];

    detailView.string=[NSString stringWithFormat:@"%@",[_array objectAtIndex:button.tag]];

    [self presentViewController:detailView animated:YES completion:nil];

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.