Klicken Sie auf die Schaltfläche "Get" in UITableViewCell


140

Ich habe einen Ansichts-Controller mit einer Tabellenansicht und einer separaten Schreibfeder für die Tabellenzellenvorlage. Die Zellenvorlage enthält einige Schaltflächen. Ich möchte auf den Schaltflächenklick zusammen mit dem Index der Zelle zugreifen, auf die im Ansichts-Controller geklickt wurde, in dem ich die Tabellenansicht definiert habe.

Also ich habe ViewController.hund ViewController.mwo ich das UITableViewund TableTemplate.h, TableTemplate.mund TableTemplate.xibwo ich die Spitze definiert haben. Ich möchte das Button-Click-Ereignis mit dem Zellenindex in ViewController.m.

Hilfe, wie kann ich das machen?

Antworten:


258

1) Weisen Sie in Ihrer cellForRowAtIndexPath:Methode das Schaltflächen-Tag als Index zu:

cell.yourbutton.tag = indexPath.row;

2) Fügen Sie wie folgt Ziel und Aktion für Ihre Schaltfläche hinzu:

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

3) Code-Aktionen basierend auf dem Index wie folgt in ViewControler:

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

Updates für mehrere Abschnitte:

Sie können diesen Link überprüfen , um einen Klick auf eine Schaltfläche in der Tabellenansicht für mehrere Zeilen und Abschnitte zu erkennen.


1
Dies kann auch über Interface Builder (IB) in Schritt 2 erfolgen. Stellen Sie einfach sicher, dass Ihr Buttons-Tag gesetzt ist. Sie wollen Ihren Aktionsaufruf wirklich nicht verwechseln. Entweder über IB oder explizit in Ihrem Code.
Sententia

@Mani MVC wird nicht beschädigt - die Aktion befindet sich in der Tabellenansicht und nicht in der Zelle.
Davecom

@davecom Wenn Sie das Schaltflächenziel als Zelle festlegen (über IB), wie wird es von tableView ausgelöst? Oder gibt es eine Möglichkeit, das Schaltflächenziel mit der Tabellenansicht zu verbinden, die in der xib der Zelle platziert ist?
Mani

24
Diese Lösung stößt beim Einfügen und Löschen von Zeilen auf Probleme. Das Tag wird nicht aktualisiert, wenn Zeilen verschoben werden. Anstatt einen Verweis auf die Zeile zu behalten. Es ist möglicherweise besser, einen Verweis auf eine eindeutige Objekt-ID beizubehalten.
Vincent Cheong

1
Immer wenn Sie den Tag-Attributen von Ansichten Werte zuweisen, haben Sie einen sehr schlechten Code-Geruch, der Sie später beißen kann. Suchen Sie nach besseren Möglichkeiten, um Ihr Ziel zu erreichen, und nicht nach dem ersten SO-Beitrag, den Sie finden.
TigerCoding

148

Delegierte sind der richtige Weg.

Wie bei anderen Antworten zu sehen, kann die Verwendung von Ansichten veraltet sein. Wer weiß, dass es morgen möglicherweise einen anderen Wrapper gibt, der möglicherweise verwendet werden muss cell superview]superview]superview]superview]. Und wenn Sie Tags verwenden, erhalten Sie am Ende n Bedingungen für die Identifizierung der Zelle. Um all dies zu vermeiden, richten Sie Delegierte ein. (Auf diese Weise erstellen Sie eine wiederverwendbare Zellenklasse. Sie können dieselbe Zellenklasse als Basisklasse verwenden und müssen lediglich die Delegatmethoden implementieren.)

Zuerst benötigen wir eine Schnittstelle (Protokoll), die von der Zelle verwendet wird, um Tastenklicks zu kommunizieren (zu delegieren). ( Sie können eine separate .h-Datei für das Protokoll erstellen und sowohl in den Tabellenansichts-Controller als auch in benutzerdefinierte Zellenklassen aufnehmen ODER sie einfach in eine benutzerdefinierte Zellenklasse einfügen, die ohnehin in den Tabellenansichts-Controller aufgenommen wird. )

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

Fügen Sie dieses Protokoll in den benutzerdefinierten Controller für Zellen- und Tabellenansichten ein. Stellen Sie sicher, dass der Table View Controller dieses Protokoll bestätigt.

Erstellen Sie in einer benutzerdefinierten Zelle zwei Eigenschaften:

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

UIButtonKlicken Sie im IBAction-Delegat auf: (Dasselbe kann für jede Aktion in einer benutzerdefinierten Zellenklasse durchgeführt werden, die zurück delegiert werden muss, um den Controller anzuzeigen. )

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

cellForRowAtIndexPathLegen Sie in der Tabellenansicht-Steuerung nach dem Entfernen der Zelle die obigen Eigenschaften fest.

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

Und implementieren Sie den Delegaten in Table View Controller:

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

Dies wäre der ideale Ansatz, um benutzerdefinierte Aktionen für Zellenschaltflächen im Table View Controller abzurufen.


2
Warum haben Sie den Delegierten zu einem starken Eigentum der Zelle gemacht? Dies gibt Ihnen einen Aufbewahrungszyklus, es sei denn, Sie wissen, dass der Controller die Zelle nur schwach hält.
JulianSymes

Was ist mit dem _cellIndex beign, der nach dem Löschen der Zelle aktualisiert wird?
Skornos

2
Ich habe von einem meiner Freunde gehört, dass die Verwendung eines Delegaten für jede Zelle den Speicherverbrauch verursacht. Verwenden Sie daher Tags. Ist das wahr?
Bista

2
Überprüfen Sie diese Frage Dude Stackoverflow.com/questions/31649220/…
Nischal Hada

@the_UB Zwischen dem Setzen eines Tags und dem Speichern einer einzelnen Referenz kann nicht viel liegen. Möglicherweise würde ein Tag mehr Speicherplatz beanspruchen.
Ian Warburton

66

Anstatt mit Tags zu spielen, habe ich einen anderen Ansatz gewählt. Delegierter für meine Unterklasse von UITableViewCell (OptionButtonsCell) gemacht und eine indexPath-Variable hinzugefügt. Über meine Schaltfläche im Storyboard habe ich @IBAction mit der OptionButtonsCell verbunden und dort eine Delegatenmethode mit dem richtigen indexPath an alle Interessierten gesendet. In der Zelle für den Indexpfad habe ich den aktuellen Indexpfad festgelegt und es funktioniert :)

Lassen Sie den Code für sich selbst sprechen:

Swift 3 Xcode 8

OptionButtonsTableViewCell.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)
    }
}

MyTableViewController.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)")
}

class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, OptionButtonsDelegate Können Sie mir helfen, ich erhalte Fehler in dieser Zeile: // Fehler: Redundante Konformität von 'MyTableViewController' mit dem Protokoll 'UITableViewDataSource'
Ulug'bek Ro'zimboyev

Sieht so aus, als würden Sie mehrmals versuchen, sich an UITableViewDataSource anzupassen. Vielleicht haben Sie eine Erweiterung, bei der Sie bereits der Datenquelle entsprechen? Kann ohne Code nicht mehr helfen
Maciej Chrzastek

1
und wie werden Daten übergeben, um eine Übergabe durchzuführen und zu einem anderen Ansichts-Controller zu wechseln?
Milad Faridnia

2
Beste und sauberste Lösung!
Appsunited

31

Dies sollte helfen: -

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

Hier ist der Absender die UIButton-Instanz, die das Ereignis sendet. myTableView ist die UITableView-Instanz, mit der Sie sich befassen.

Stellen Sie einfach die richtige Zellreferenz ein und die ganze Arbeit ist erledigt.

Möglicherweise müssen Sie die Schaltflächen aus der Inhaltsansicht der Zelle entfernen und sie direkt zur UITableViewCell-Instanz als Unteransicht hinzufügen.

Oder

Sie können ein Tag-Namensschema für verschiedene UIButtons in cell.contentView formulieren. Mit diesem Tag können Sie später die Zeilen- und Abschnittsinformationen nach Bedarf kennen.


4
es sollte [[Absenderübersicht] Übersicht sein];
pierre23

2
Dies ist gut für sehr einfache Zellen. Wenn Ihre Zelle jedoch einen tiefen Baum von Ansichten hat, ist Manis Antwort am besten.
Sententia

3
Jetzt in iOS 7 sollte es UITableViewCell * cell = (UITableViewCell *) sein. Danke dir.
Rajan Maharjan

Überprüfen Sie diese Frage Dude Stackoverflow.com/questions/31649220/…
Nischal Hada

22

Der folgende Code könnte Ihnen helfen.

Ich habe UITableViewmit benutzerdefinierten Prototyp Zellklasse im UITableViewCellInneren genommen UIViewController.

Also ich habe ViewController.h, ViewController.mund TableViewCell.h,TableViewCell.m

Hier ist der Code dafür:

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;
}

Benutzerdefinierte Zellenklasse:

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

und

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);
    }
}

Hinweis : Hier habe ich alle UIControlsmit Storyboard aufgenommen.

Hoffe das kann dir helfen ... !!!


Der beste Weg überhaupt
Daniel Raouf

15

Der Grund, warum ich die folgende Technik mag, weil sie mir auch hilft, den Tabellenabschnitt zu identifizieren.

Schaltfläche in Zelle hinzufügen cellForRowAtIndexPath:

 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];

Ereignis addTask:

-(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;
    }
}

Hoffe diese Hilfe.


Überprüfen Sie diese Frage Dude Stackoverflow.com/questions/31649220/…
Nischal Hada

12

Verwenden Sie Swift-Verschlüsse:

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

Taruns Code funktioniert unter iOS7 nicht, da sich die UITableViewCell-Struktur geändert hat und er stattdessen "UITableViewCellScrollView" erhalten würde.

Dieser Beitrag UITableViewCell mit Superview in iOS 7 abrufen bietet eine gute Lösung zum Erstellen einer Schleife, um die richtige übergeordnete Ansicht zu finden, unabhängig von zukünftigen Änderungen in der Struktur. Es läuft darauf hinaus, eine Schleife zu erstellen:

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

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

Der Link enthält Code für eine wiederverwendbarere Lösung, dies sollte jedoch funktionieren.


6

Swift 2.2

Sie müssen ein Ziel für diese Schaltfläche hinzufügen.

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

Funktionsname: verbunden // zum Beispiel

Und natürlich müssen Sie das Tag dieser Schaltfläche festlegen, da Sie sie verwenden.

myButton.tag = indexPath.row

Sie können dies erreichen, indem Sie UITableViewCell unterklassifizieren. Verwenden Sie es im Interface Builder, legen Sie eine Schaltfläche in dieser Zelle ab, verbinden Sie es über eine Steckdose und los geht's.

So erhalten Sie das Tag in der verbundenen Funktion:

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

6

Swift 3 mit einem Verschluss

Eine gute Lösung ist die Verwendung eines Abschlusses in einer benutzerdefinierten UITableViewCell, um eine Aktion an den viewController zurückzurufen.

In der Zelle:

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()
    }
}

In View Controller: Tableview Delegate

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

Ich finde es am einfachsten, die Schaltfläche in Ihrer Zelle zu unterordnen (Swift 3):

class MyCellInfoButton: UIButton {
    var indexPath: IndexPath?
}

In Ihrer Zellklasse:

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

Geben Sie in der Datenquelle der Tabellenansicht oder Sammlungsansicht beim Deaktivieren der Zelle der Schaltfläche ihren Indexpfad:

cell.infoButton.indexPath = indexPath

Sie können diesen Code also einfach in Ihren Table View Controller einfügen:

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

Und vergessen Sie nicht, die Klasse der Schaltfläche in Ihrem Interface Builder festzulegen und mit der handleTapOnCellInfoButtonFunktion zu verknüpfen !


bearbeitet:

Verwenden der Abhängigkeitsinjektion. So richten Sie den Aufruf einer Schließung ein:

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

und fügen Sie den Abschluss in die willDisplay-Methode des Delegaten der Sammlungsansicht ein:

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

Der Closure-Ansatz ist der schnellste Weg, den ich je gesehen habe. Gute Arbeit!
Clifton Labrum

5

Seine Arbeit für mich.

 - (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

für schnell 4:

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

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


1

Wenn Sie den Parameterwert mithilfe von Closure von der Zelle an UIViewController übergeben möchten, dann

//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

Die @ Mani-Antwort ist gut, jedoch werden Tags von Ansichten in der Inhaltsansicht der Zelle häufig für andere Zwecke verwendet. Sie können stattdessen das Tag der Zelle (oder das contentView-Tag der Zelle) verwenden:

1) Weisen Sie in Ihrer cellForRowAtIndexPath:Methode das Tag der Zelle als Index zu:

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

2) Fügen Sie wie folgt Ziel und Aktion für Ihre Schaltfläche hinzu:

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

3) Erstellen Sie eine Methode, die die Zeile des Absenders zurückgibt (danke @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) Codeaktionen basierend auf dem Index:

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

0

CustomTableCell.h ist eine UITableViewCell:

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

MyVC.m nach dem Import:

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

In "cellForRowAtIndexPath" in 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];

}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.