প্রোগ্রামটিমে টেবিলভিউ সারি নির্বাচন করুন


135

আমি প্রোগ্রামক্রমে কীভাবে একটি UITableViewসারি নির্বাচন করব যাতে এটি

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath

মৃত্যুদণ্ড কার্যকর হয়? selectRowAtIndexPathকেবল সারিটি হাইলাইট করবে।


আমি একই সমস্যাটির মুখোমুখি হয়েছি এবং কেবলমাত্র লিঙ্কটি সূক্ষ্ম করেছি : স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৫৩২৪৫০১ / আপনি আশা করি এটি আপনার পক্ষে সহায়ক হবে।
মাইকেল

উত্তর:


109

রেফারেন্স ডকুমেন্টেশন থেকে :

এই পদ্ধতিতে কল করার কারণে প্রতিনিধি কোনও বার্তা tableView:willSelectRowAtIndexPath:বা tableView:didSelectRowAtIndexPath:বার্তা গ্রহণ করে না UITableViewSelectionDidChangeNotificationএবং পর্যবেক্ষকদের কাছে বিজ্ঞপ্তি প্রেরণ করে না ।

আমি যা করবো তা হ'ল:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self doSomethingWithRowAtIndexPath:indexPath];
}

এবং তারপরে, আপনি যেখান থেকে নির্বাচন করুনআরএন্টইন্ডেক্সপথ কল করতে চেয়েছিলেন, আপনি পরিবর্তে doSomethingWithRowAtIndexPath কল করুন। এর উপরে, আপনি যদি ইউআই প্রতিক্রিয়াটি ঘটতে চান তবে আপনি অতিরিক্তভাবে নির্বাচিত রওএন্টেক্সপথকেও কল করতে পারেন।


4
অথবা আপনি যখন প্রোগ্রামটি সারিটি নির্বাচন করেন, আপনি টেবিল ভিউ: ডায়ডলেকট্রোঅ্যাট ইন্ডেক্সপথ: কল করতে পারেন: নিজেই (আপনি যে শ্রেণিতে প্রতিনিধি হিসাবে ওয়্যার্ড করেছেন)।
কেন্ডাল হেলস্টেটার জেলনার

3
এই পদ্ধতিটি আমার কাছে হ্যাকের মতো মনে হচ্ছে, এটি কাজটি করেছে তবে আমি মনে করি এটি করার আরও ভাল উপায় থাকা উচিত।
তপন ঠাকর

1
আমি সত্যিই মনে করি না যে আপনার "ডোসোমিংথিংথ উইথরো ইন্ডেক্সপথ" কল করার দরকার আছে আপনি কেবল ডেলিগেট পদ্ধতিতে কল করতে পারবেন না এবং আপনি যে স্থানটি প্রতিনিধি পদ্ধতিটি কার্যকর করেছিলেন সেখান থেকে ডডলেস্ট লজিক কার্যকর করতে প্রয়োজনীয় যুক্তিগুলি পাস করতে পারবেন না?
ইমপ্যাক্টজিরো

111

জানুস যেমন বলেছিল:

এটিকে (-StelectRowAtIndexPath: অ্যানিমেটেড: স্ক্রোলপজিশন :) পদ্ধতি কল করার ফলে প্রতিনিধি একটি টেবিল প্রাপ্ত করে না: ভিউসিলিটারআরএটআইডেক্সপথ: বা টেবিলভিউ: didSelectRowAtIndexPath: বার্তা পাঠায় বা এটি ইউআইটিএলভিউসিলিভিংডিশন-সংক্রান্ত বিজ্ঞপ্তিগুলি প্রেরণ করবে না।

সুতরাং আপনাকে কেবল delegateনিজেই পদ্ধতিটি কল করতে হবে ।

উদাহরণ স্বরূপ:

সুইফট 3 সংস্করণ:

let indexPath = IndexPath(row: 0, section: 0);
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)

উদ্দেশ্য সংস্করণ:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath 
                            animated:YES 
                      scrollPosition:UITableViewScrollPositionNone];
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];

সুইফট ২.৩ সংস্করণ:

 let indexPath = NSIndexPath(forRow: 0, inSection: 0);
 self.tableView.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.None)
 self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath)

63

ইউআইটিএবলভিউ'র নির্বাচন করা রোআউটআইডেক্সপথ: অ্যানিমেটেড: স্ক্রোলপোজিশন: কৌশলটি করা উচিত।

কেবল UITableViewScrollPositionNoneস্ক্রোলপোজিশনের জন্য পাস করুন এবং ব্যবহারকারী কোনও চলন দেখতে পাবেন না।


আপনি নিজে অ্যাকশনটি চালাতে সক্ষম হবেন:

[theTableView.delegate tableView:theTableView didSelectRowAtIndexPath:indexPath]

আপনার পরে selectRowAtIndexPath:animated:scrollPosition:হাইলাইটটি ঘটবে পাশাপাশি কোনও যুক্ত যুক্তিও।


দুঃখিত, আমি এটি ব্যবহার করছি আমি দুর্ঘটনাক্রমে স্ক্রোলটরোআউটআইডেক্সপথ রেখেছি। আমি প্রশ্ন আপডেট করেছি। scrolToRowAtIndexPath কেবলমাত্র সেলটি হাইলাইট করে।
চতুর্থ স্পেস

2
হ্যাঁ, আমি দুঃখিত। এটি বলেছে যে এটি পোস্ট করা ডক্স লিঙ্কে ঠিক সেলেক্টরউএটআইএনডেক্সপথটি চালিত হবে না। আমার পড়া শিখতে হবে
anq

@ আঙ্ক: আপনাকে অনেক ধন্যবাদ! আমি কাস্টম ঘরে সিলিকট্রোআউটইন্টেক্সপথ: সূচিপথ কল করার সময় এটি আমাকে সহায়তা করে।
বেন্টলে

21

আপনি যদি কিছু সারি নির্বাচন করতে চান তবে এটি আপনাকে সহায়তা করবে

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[someTableView selectRowAtIndexPath:indexPath 
                           animated:NO 
                     scrollPosition:UITableViewScrollPositionNone];

এটি সারিটিও হাইলাইট করবে। তারপর প্রতিনিধি

 [someTableView.delegate someTableView didSelectRowAtIndexPath:indexPath];

18

সুইফট 3/4/5 সমাধান

সারি নির্বাচন করুন

let indexPath = IndexPath(row: 0, section: 0)
tblView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
myTableView.delegate?.tableView!(myTableView, didSelectRowAt: indexPath)

ডি-সিলেক্ট সারি

let deselectIndexPath = IndexPath(row: 7, section: 0)
tblView.deselectRow(at: deselectIndexPath, animated: true)
tblView.delegate?.tableView!(tblView, didDeselectRowAt: indexPath)

আমার জন্য, '.delegate' যুক্ত? চাবি ছিল। (সুইফ্ট 4.5)
কোরিয়ানএক্সকোড ওয়ার্কার

4

আইপ্যাড এবং আইফোন প্ল্যাটফর্মগুলির জন্য দুটি পৃথক পদ্ধতি রয়েছে, সুতরাং আপনার উভয়টি প্রয়োগ করা দরকার:

  • নির্বাচন হ্যান্ডলার এবং
  • segue।

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    
    // Selection handler (for horizontal iPad)
    [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
    
    // Segue (for iPhone and vertical iPad)
    [self performSegueWithIdentifier:"showDetail" sender:self];

3

একটি টেবিল সারি নির্বাচন করতে এই বিভাগটি ব্যবহার করুন এবং একটি বিলম্বের পরে প্রদত্ত সেগটি সম্পাদন করুন।
আপনার viewDidAppearপদ্ধতির মধ্যে এটি কল করুন :

[tableViewController delayedSelection:withSegueIdentifier:]


@implementation UITableViewController (TLUtils)

-(void)delayedSelection:(NSIndexPath *)idxPath withSegueIdentifier:(NSString *)segueID {
    if (!idxPath) idxPath = [NSIndexPath indexPathForRow:0 inSection:0];                                                                                                                                                                 
    [self performSelector:@selector(selectIndexPath:) withObject:@{@"NSIndexPath": idxPath, @"UIStoryboardSegue": segueID } afterDelay:0];                                                                                               
}

-(void)selectIndexPath:(NSDictionary *)args {
    NSIndexPath *idxPath = args[@"NSIndexPath"];                                                                                                                                                                                         
    [self.tableView selectRowAtIndexPath:idxPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];                                                                                                                            

    if ([self.tableView.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)])
        [self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:idxPath];                                                                                                                                              

    [self performSegueWithIdentifier:args[@"UIStoryboardSegue"] sender:self];                                                                                                                                                            
}

@end

2
প্রশ্নগুলি segues সঙ্গে কিছুই করার ছিল না।
মুছে ফেলা_ইউজার

হ্যাঁ, আপনার উত্তরের কিছুই সম্পর্কে প্রশ্নের সাথে সম্পর্কিত নয়
দুলগান

2
এই উত্তরটির প্রশংসা করুন। এটি পুরোপুরি কার্যকর হয় যদি ব্যবহারকারী একই আচরণ অর্জন করতে চায় তবে স্টোরিবোর্ড ব্যবহার করে।
বিজয় থানগরাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.