Hoe selecteer ik programmatisch een rij UITableView
zodat
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
wordt geëxecuteerd? selectRowAtIndexPath
zal alleen de rij markeren.
Antwoord 1, autoriteit 100%
Zoals Jaanus vertelde:
Deze (-selectRowAtIndexPath:animated:scrollPosition 🙂 methode aanroepen
zorgt er niet voor dat de gedelegeerde een ontvangt
tableView:willSelectRowAtIndexPath: of
tableView:didSelectRowAtIndexPath: bericht, noch zal het verzenden
UITableViewSelectionDidChangeNotification-meldingen voor waarnemers.
Je hoeft dus alleen de methode delegate
zelf aan te roepen.
Bijvoorbeeld:
Swift 3-versie:
let indexPath = IndexPath(row: 0, section: 0);
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)
ObjectiveC-versie:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath
animated:YES
scrollPosition:UITableViewScrollPositionNone];
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
Swift 2.3-versie:
let indexPath = NSIndexPath(forRow: 0, inSection: 0);
self.tableView.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.None)
self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath)
Antwoord 2, autoriteit 97%
Het aanroepen van deze methode zorgt er niet voor dat de gemachtigde een
tableView:willSelectRowAtIndexPath:
oftableView:didSelectRowAtIndexPath:
bericht ontvangt, en het verzendt ook geenUITableViewSelectionDidChangeNotification
meldingen aan waarnemers.
Wat ik zou doen is:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self doSomethingWithRowAtIndexPath:indexPath];
}
En dan, vanaf waar je selectRowAtIndexPath wilde aanroepen, roep je in plaats daarvan doSomethingWithRowAtIndexPath aan. Bovendien kunt u ook selectRowAtIndexPath aanroepen als u wilt dat de UI-feedback plaatsvindt.
Antwoord 3, autoriteit 54%
UITableView’s selectRowAtIndexPath:animated:scrollPosition:zou het lukken.
Geef gewoon UITableViewScrollPositionNone
door voor scrollPosition en de gebruiker zal geen beweging zien.
U zou de actie ook handmatig moeten kunnen uitvoeren:
[theTableView.delegate tableView:theTableView didSelectRowAtIndexPath:indexPath]
nadat je selectRowAtIndexPath:animated:scrollPosition:
hebt geselecteerd, zodat de markering plaatsvindt, evenals alle bijbehorende logica.
Antwoord 4, autoriteit 18%
als je een rij wilt selecteren, zal dit je helpen
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[someTableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
Hiermee wordt de rij ook gemarkeerd.
Delegeer dan
[someTableView.delegate someTableView didSelectRowAtIndexPath:indexPath];
Antwoord 5, autoriteit 16%
Snelle 3/4/5 oplossing
Selecteer rij
let indexPath = IndexPath(row: 0, section: 0)
tblView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
myTableView.delegate?.tableView!(myTableView, didSelectRowAt: indexPath)
Deselecteer rij
let deselectIndexPath = IndexPath(row: 7, section: 0)
tblView.deselectRow(at: deselectIndexPath, animated: true)
tblView.delegate?.tableView!(tblView, didDeselectRowAt: indexPath)
Antwoord 6, autoriteit 3%
Er zijn twee verschillende methoden voor iPad- en iPhone-platforms, dus u moet beide implementeren:
- selectie handler en
-
seg.
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];
Antwoord 7, autoriteit 3%
Gebruik deze categorie om een tabelrij te selecteren en een bepaalde reeks na een vertraging uit te voeren.
Roep dit aan binnen uw viewDidAppear
methode:
[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