Ich arbeite an einer App mit Aktien, die in Portfolios angeordnet sind. Dies passt also natürlich zur Tabellenansicht, und ich arbeite an der Bearbeitungsinteraktion. Es ist einfach genug, dem Benutzer das Hinzufügen oder Löschen von Aktien zu ermöglichen, sie innerhalb eines Portfolios oder in ein anderes Portfolio zu ziehen, aber eine Sache, die ich nicht ordnungsgemäß tun konnte, ist, den Benutzer ein Portfolio über oder unter ein anderes ziehen zu lassen.
Ich habe gerade eine Hacky-Lösung, bei der Zeile 0 jedes Abschnitts der Portfolio-Name ist. Wenn diese Zeile über ein anderes Portfolio gezogen wird, wird die gesamte Tabelle mit den vertauschten Portfolios neu geladen. Das funktioniert, fühlt sich aber nicht sehr natürlich an.
Ich bin sicher, dass ich nicht der erste bin, der auf dieses Problem stößt. Hat jemand eine verfeinerte Lösung?
Eine verwandte Frage: Wie kann ich Benutzern erlauben, ein neues Portfolio / einen neuen Abschnitt zu erstellen?
Kinderleicht:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
{
NSMutableArray *_data;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_data = [NSMutableArray arrayWithObjects:@"One", @"Two", @"Three", nil];
self.tableView.editing = YES;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _data.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"reuseIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier];
}
cell.textLabel.text = _data[indexPath.row];
cell.showsReorderControl = YES;
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
[_data exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
}
@end
BEARBEITEN:
Was Sie jetzt gefragt haben, ist etwas komplizierter. Ich habe ein Beispiel erstellt, in dem Tabellen in Zellen eingefügt werden, wodurch verschachtelte Zellen angezeigt werden. Das Beispiel ist sehr unattraktiv, aber es funktioniert, und es gibt keinen Grund, warum Sie es nicht hübsch aussehen lassen können. Probieren Sie es aus:
https://github.com/MichaelSnowden/TableViewInCell
Wenn das bei Ihnen nicht funktioniert, versuchen Sie, es UITableView moveSection:(NSInteger) toSection:(NSInteger)
hübsch aussehen zu lassen. Die Dokumentation für diese Methode finden Sie hier .
Meine Erfahrung mit der oben genannten Methode war, dass sie sehr einfach zu bedienen ist und gut aussieht, wenn sie aufgerufen wird. Eine clevere Möglichkeit wäre, Header mit Tippgestenerkennern zu erstellen. Markieren Sie beim ersten Tippen diesen Abschnitt und zeichnen Sie diesen Indexpfad auf. Rufen Sie beim zweiten Tippen die Methode für die beiden Indexpfade auf. Es sollte gut funktionieren, aber Sie werden kein Drag & Drop davon bekommen.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen