ios - UITableViewCell ভিতরে বাটন ক্লিক করুন




objective-c uibutton (12)

সুইফ্ট 2.2

আপনি যে বাটন জন্য লক্ষ্য যোগ করা প্রয়োজন।

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

FunctionName: উদাহরণস্বরূপ // সংযুক্ত

এবং অবশ্যই আপনি এটি ব্যবহার করছেন যেহেতু আপনি যে বাটন ট্যাগ সেট করতে হবে।

myButton.tag = indexPath.row

আপনি UITableViewCell subclassing দ্বারা এটি অর্জন করতে পারেন। ইন্টারফেস বিল্ডার এ এটি ব্যবহার করুন, সেই সেলটিতে একটি বোতাম ড্রপ করুন, এটি আউটলেটের মাধ্যমে সংযোগ করুন এবং সেখানে আপনি যান।

সংযুক্ত ফাংশনে ট্যাগটি পেতে:

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

আমার একটি টেবিল দর্শন এবং একটি টেবিল সেল টেমপ্লেট জন্য একটি পৃথক nib সঙ্গে একটি ভিউ কন্ট্রোলার আছে। সেল টেমপ্লেট কিছু বোতাম আছে। আমি কন্ট্রোল কন্ট্রোলারের ভিতরে ক্লিককৃত সেলের সূচী বরাবর বাটনে ক্লিক করতে চাই যেখানে আমি টেবিল দর্শন সংজ্ঞায়িত করেছি।

সুতরাং আমার কাছে ViewController.h এবং ViewController.m যেখানে আমার কাছে UITableView এবং TableTemplate.h , TableTemplate.m এবং TableTemplate.xib যেখানে আমার নিবি সংজ্ঞায়িত আছে। আমি ViewController.m সেল ইনডেক্সের সাথে বাটন ক্লিক ইভেন্টটি চাই।

আমি কিভাবে যে কোন সাহায্য করতে পারেন?


1) আপনার cellForRowAtIndexPath: পদ্ধতি, সূচী হিসাবে বোতাম ট্যাগ বরাদ্দ করুন:

cell.yourbutton.tag = indexPath.row;

2) নীচের হিসাবে আপনার বাটন জন্য লক্ষ্য এবং কর্ম যোগ করুন:

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

3) ViewControler নীচের সূচী ভিত্তিক কোড ক্রিয়া:

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

একাধিক বিভাগের জন্য আপডেট:

আপনি একাধিক সারি এবং বিভাগের জন্য টেবিলের দৃশ্যতে বাটনে ক্লিক করার জন্য এই লিঙ্কটি দেখতে পারেন।


CustomTableCell.h একটি UITableViewCell:

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

আমদানি পর MyVC.m:

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

MyVC.m এ "cellForRowAtIndexPath" এর ভিতরে:

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

আমার জন্য তার কাজ।

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

ইউরাইভ ভিউচেলের কাঠামো বদলে গেছে এবং তার পরিবর্তে সেটি "UITableViewCellScrollView" পাবে, কারণ তারন কোডটি iOS7 এ কাজ করে না।

এই পোস্টটি iOS 7 এর তত্ত্বাবধানে থাকা UITableViewCell পাওয়ার সাথে সাথে সঠিক পিতামাতার ভিউটি সন্ধান করার জন্য একটি লুপ তৈরি করা একটি ভাল সমাধান রয়েছে, নির্বিশেষে কাঠামোতে ভবিষ্যতে কোনও পরিবর্তন ছাড়াই। এটি একটি লুপ তৈরি করার জন্য নিচে boils:

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

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

লিঙ্কটিতে আরো পুনঃব্যবহারযোগ্য সমাধান করার কোড রয়েছে, তবে এটি কাজ করা উচিত।


এই সাহায্য করা উচিত: -

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

এখানে পাঠক UI ইভেন্টের প্রেরণকারী UIButton উদাহরণ। myTableView হল UITableView উদাহরণ যা আপনি ডিল করছেন।

শুধু ঘর রেফারেন্স অধিকার পেতে এবং সব কাজ সম্পন্ন করা হয়।

আপনি সেলের সামগ্রী থেকে বোতামগুলি অপসারণ করতে পারেন এবং এটি সরাসরি সাবউইভ হিসাবে UITableViewCell ইনস্ট্যান্সে যুক্ত করুন।

অথবা

আপনি cell.contentView এ বিভিন্ন UIButtons জন্য একটি ট্যাগ নামকরণ প্রকল্প গঠন করতে পারেন। এই ট্যাগ ব্যবহার করে, পরে আপনি প্রয়োজনীয় হিসাবে সারি এবং বিভাগ তথ্য জানতে পারেন।


দ্রুত 4 জন্য:

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

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


নিম্নলিখিত কোড আপনাকে সাহায্য করতে পারে।

UITableViewCell ভিতরে UITableViewCell নামক কাস্টম প্রোটোটাইপ সেল ক্লাসের সাথে আমি UITableView গ্রহণ UITableView

তাই আমার ViewController.h , ViewController.m এবং TableViewCell.h , TableViewCell.m

এখানে তার জন্য কোড:

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

কাস্টম সেল ক্লাস:

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

নোট : এখানে আমি স্টোরিবোর্ড ব্যবহার করে সব UIControls গ্রহণ করেছেন।

যে আপনি সাহায্য করতে পারেন আশা করি...!!!


সুইফট বন্ধের ব্যবহার করুন:

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

প্রতিনিধিরা যেতে উপায়।

মতামত ব্যবহার করে অন্যান্য উত্তর সঙ্গে দেখা যায় পুরানো পেতে পারে। আগামীকাল কে জানে অন্য একটি cell superview]superview]superview]superview] হতে পারে এবং cell superview]superview]superview]superview] ব্যবহার করতে হবে cell superview]superview]superview]superview] । এবং যদি আপনি ট্যাগগুলি ব্যবহার করেন তবে অন্য কোথাও কোষ সনাক্ত করার শর্তগুলির সাথে এন সংখ্যাটি শেষ হবে। যে সেট আপ প্রতিনিধিদের এড়াতে। (এটি করার মাধ্যমে আপনি পুনরায় ব্যবহারযোগ্য সেল ক্লাস তৈরি করতে পারবেন। আপনি বর্গ ক্লাস হিসাবে একই সেল ক্লাস ব্যবহার করতে পারেন এবং আপনাকে যা করতে হবে তা প্রতিনিধি প্রতিনিধি পদ্ধতিগুলিকে বাস্তবায়ন করা।)

প্রথমে আমাদের একটি ইন্টারফেস (প্রোটোকল) দরকার যা সেল দ্বারা যোগাযোগ করতে (প্রতিনিধি) বাটন ক্লিক ব্যবহার করা হবে। ( আপনি প্রোটোকলের জন্য একটি পৃথক। এইচ ফাইল তৈরি করতে পারেন এবং উভয় টেবিল ভিউ কন্ট্রোলার এবং কাস্টম সেল ক্লাসগুলিতে অন্তর্ভুক্ত করতে পারেন অথবা কেবল কাস্টম সেল ক্লাসে যোগ করতে পারেন যা সারণী দৃশ্য নিয়ামকটিতে অন্তর্ভুক্ত হবে )

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

কাস্টম সেল এবং টেবিল ভিউ কন্ট্রোলার এই প্রোটোকল অন্তর্ভুক্ত করুন। এবং নিশ্চিত করুন টেবিল দৃশ্য নিয়ামক এই প্রোটোকল নিশ্চিত।

কাস্টম সেলে দুটি বৈশিষ্ট্য তৈরি করুন:

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

UIButton IBAction প্রতিনিধিতে ক্লিক করুন: ( কাস্টম সেল ক্লাসে যেকোনো পদক্ষেপের জন্য একই কাজ করা যেতে পারে যা কন্ট্রোলার দেখতে ফিরে প্রতিনিধিত্ব করতে হবে )

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

টেবিল ভিউ কন্ট্রোলার cellForRowAtIndexPath এ সেলটি সরিয়ে cellForRowAtIndexPath পরে উপরের বৈশিষ্ট্যগুলি সেট করুন।

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

এবং টেবিল ভিউ কন্ট্রোলার প্রতিনিধি প্রতিনিধি বাস্তবায়ন:

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

এই টেবিল ভিউ কন্ট্রোলার মধ্যে কাস্টম সেল বাটন কর্ম পেতে আদর্শ পদ্ধতির হতে হবে।


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




}

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

}






uibutton