Satırlar olarak adlandırılan bir NSMutableArray dizesini kullanmanın basit bir örneği için, tablo denetleyicimde tableView satırlarını hareket ettirmek ve dizimde yansımaları değiştirmek için ne yapmam gerekir?UITableView satırlarını yeniden düzenlemek için hangi yöntemleri uygulamak zorundayım?
cevap
Ağır kaldırma işimizi yapıyoruz.
- (void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath
{
NSLog(@"move from:%d to:%d", fromIndexPath.row, toIndexPath.row);
// fetch the object at the row being moved
NSString *r = [rows objectAtIndex:fromIndexPath.row];
// remove the original from the data structure
[rows removeObjectAtIndex:fromIndexPath.row];
// insert the object at the target row
[rows insertObject:r atIndex:toIndexPath.row];
NSLog(@"result of move :\n%@", [self rows]);
}
Bu temel bir örnek olduğundan, tüm satırları hareketli hale getirebiliriz.
- (BOOL)tableView:(UITableView *)tableView
canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
NSMutableArray
exchangeObjectAtIndex:withObjectAtIndex:
adlı bir yöntem vardır.
Bunu denedim, ancak davranış farklı.Tablo satırları değiştirmez, bir satırı kaldırır, ardından farklı bir yere ekler. Bu yöntemi kullanırsam, tablo ve destek deposu, her hareketle senkronizasyondan daha fazla çıkar. –
Yukarıdakilerden hiçbiri çalışmaz. Orijinal olarak gönderilen kodda, tablo görünümü, kullanılmakta olan verileri kaldırdığı ve sonra da düzeltildikten sonra çökecektir, çünkü tablo bir 'yeniden düzenleme' yöntemi sayesinde doğru veriye sahip olmayacaktır.
exchangeObjectAtIndex: withObjectAtIndex: Bir tableview
Neden
yeniden düzenleme, kendi nasıl uyguladığını göre bir dizi yeniden düzenleme için çalışmaz? Kullanıcı, yeniden düzenlemek için bir tablo hücresi seçtiğinde, bu hücre, taşıdıkları hücreyle değiştirilmez. Seçtikleri hücre yeni satır dizinine eklenir ve daha sonra orijinal hücre kaldırılır. En azından, kullanıcıya göründüğü gibi.Çözüm: Tablo görünümünün bir yeniden düzenlemeyi gerçekleştirmesi nedeniyle, doğru satırı ekleyip çıkardığımızdan emin olmak için bir denetim yapmamız gerekiyor. Bir araya getirdiğim bu kod basit ve benim için mükemmel çalışıyor. örnek olarak orijinal yayınlanan kod verilerini kullanarak
: Eğer birkaç dakikanızı ayırın ve bir Yeniden düzenle sırasında tableview neler olduğuna bir göz atacak olursak biz neden ekledin
- (void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath
{
NSLog(@"move from:%d to:%d", fromIndexPath.row, toIndexPath.row);
// fetch the object at the row being moved
NSString *r = [rows objectAtIndex:fromIndexPath.row];
// checks to make sure we add and remove the right rows
if (fromIndexPath.row > toIndexPath.row) {
// insert the object at the target row
[rows insertObject:r atIndex:toIndexPath.row];
// remove the original from the data structure
[rows removeObjectAtIndex:(fromIndexPath.row + 1)];
}
else if (fromIndexPath.row < toIndexPath.row) {
// insert the object at the target row
[rows insertObject:r atIndex:(toIndexPath.row + 1)];
// remove the original from the data structure
[rows removeObjectAtIndex:(fromIndexPath.row)];
}
}
anlayacaksın 1'lerin biz yaptı.
Çok yeni xcode yapıyorum, bu yüzden muhtemelen bunu yapmanın daha kolay bir yolu olduğunu biliyorum ya da kod muhtemelen basitleştirilebilir .... Sadece nerede olabileceğime yardım etmeye çalışıyorum çünkü bu beni birkaç kez aldı Bunu anlamaya saatler. Umarım bu birileri zaman kaybeder!
Apple'ın belgelerine ve kendi deneyimlerine göre, bu oldukça iyi çalışıyor bazı basit kod şudur:
NSObject *tempObj = [[self.rows objectAtIndex:fromIndexPath.row] retain];
[self.rows removeObjectAtIndex:fromIndexPath.row];
[self.rows insertObject:tempObj atIndex:toIndexPath.row];
[tempObj release];
Güzel cevap. Senin her şeyiniz en doğru olanıdır. Teşekkürler dostum! – GeneCode
basit uygulanmasına karşı başımı kırma sonra bu tartışma bulundu ... Michael Berding çözümdür Benim için en iyisi, Apple yolu, sadece ARC'yi kullanırken korumayı kaldırmayı ve bırakmayı unutmayın. Yani, daha özlü çözüm removeObjectAtIndex denir
NSObject *tempObj = [self.rows objectAtIndex:fromIndexPath.row];
[self.rows removeObjectAtIndex:fromIndexPath.row];
[self.rows insertObject:tempObj atIndex:toIndexPath.row];
- 1. UITableView temsilci yöntemleri
- 2. CURL komutunu aramayı yeniden düzenlemek için dönüştürmek
- 3. Android Studio'daki yöntemleri manuel olarak yeniden düzenlemek için hızlı bir yol var mı?
- 4. UITableView nasıl yeniden düzenlenebiliyor?
- 5. UITableView hangi satırda kaymayı durduracak?
- 6. yeniden düzenleme UITableView bölümleri, satırlar ve bölümler
- 7. Kaydırmayı silmek için (UITableView) varsayılan metnini düzenlemek veya çevirmek mümkün mü?
- 8. UITableView Çekirdek Verileri yeniden düzenleniyor
- 9. UITableViewCell - denetimi yeniden düzenlemek yanında aksesuar görünümü gösteriliyor
- 10. Google Maps Polyline'ı düzenlemek için olay işleyicisi?
- 11. UITableView boşken nasıl yeniden yüklenir?
- 12. Toplam genişlik yeniden boyutlandırmadan tablo satırlarını gizleme
- 13. HTML listelerini yeniden düzenlemek için sürükleyin ve bırakın
- 14. Yeniden düzenlemek için kodun düzenlenmesi, depolanması ve saklanması
- 15. Java kod için başka yöntemler için hangi yöntemleri çağırdığınızı görselleştirmek için hangi araçlar kullanılabilir?
- 16. önyükleme sayfa yeniden boyutlandırma öğeleri sayfadaki aynı sütun yeniden düzenlemek?
- 17. Silverlight'ta düzenlemek için tıkla
- 18. UITableView
- 19. UITableView ve tvOS için yeni yöntemler
- 20. UITableView
- 21. Görüntüyü UITableView hücresine sığdırmak için nasıl yeniden boyutlandırılır?
- 22. Talimatları düzenlemek için bir java classfile/bytecode editörü var mı?
- 23. Farklı Öğeler için UITableView durumu nasıl kaydedilir?
- 24. Sayfaları yeniden yükleme yöntemleri arasındaki farklar
- 25. Css'de görüntüye .xhtml eklemek zorundayım
- 26. ios UITableView silme modunu silme/yeniden düzenleme, silme simgesi silme
- 27. Ruby - Sınıf yöntemleri nasıl yeniden tanımlanır?
- 28. redirect_to düzenlemek
- 29. Düz UITableView
- 30. UITableView,
, ki (o ayırmanın neden belki ve) o nesnenin başvuru sayısı azaltacaktır? Ben exchangeObjectAtIndex: withObjectAtIndex: (@dreamlax tarafından önerildiği gibi) daha güvenli olduğunu düşünüyorum. –
BTW, kendi sorunuzu cevaplıyorsanız, bunu bir wiki yapmak için iyi bir form olduğunu düşünüyorum. –
@KristopherJohnson 'exchangeObjectAtIndex: withObjectAtIndex:' bu durumda uygun değil. TableView: moveRowAtIndexPath: toIndexPath: 'tarafından istenenlerden farklı anlamlara sahiptir. – Benjohn