Nativescript iOS делегат listView (ленивая загрузка?) - PullRequest
0 голосов
/ 15 февраля 2019

Я хотел бы использовать событие onScroll для списка в nativescript, но событие не существует.Итак, я перехожу к нативному, поэтому я хотел бы создать делегата для моего списка.Все работает, но я не знаю почему, я должен сделать console.log моим делегатом, чтобы использовать его, иначе он не запускается.У вас есть представление о причине?

export class ItemsComponent implements OnInit, AfterViewInit {
   items: Array<Item>;

   @ViewChild('header') header: ElementRef;
   @ViewChild('listView') listView: ElementRef;

   // This pattern makes use of Angular’s dependency injection implementation to
   // inject an instance of the ItemService service into this class.
   // Angular knows about this service because it is included in your app’s main NgModule,
   // defined in app.module.ts.
   constructor(private itemService: ItemService, private zone: NgZone) { }

   ngOnInit(): void {
       this.items = this.itemService.getItems();
   }

   ngAfterViewInit() {
       setTimeout(() => {
          if (isIOS) {
               let newDelegate = newUITableViewDelegateImpl.initWithOriginalDelegate(this.listView.nativeElement._delegate);
               this.listView.nativeElement.ios.delegate = newDelegate;
               console.log(this.listView.nativeElement.ios.delegate);
           }
       }, 50)

   }
}


class newUITableViewDelegateImpl extends NSObject implements UITableViewDelegate {
    public static ObjCProtocols = [UITableViewDelegate];

    private _originalDelegate: UITableViewDelegate;

    public static initWithOriginalDelegate(originalDelegate: UITableViewDelegate): newUITableViewDelegateImpl {
        console.log("initWithOwner")

        let delegate = <newUITableViewDelegateImpl>newUITableViewDelegateImpl.new();
        delegate._originalDelegate = originalDelegate;

        return delegate;
    }

    public scrollViewWillBeginDragging(scrollView: UIScrollView) {
        console.log("scrollViewWillBeginDragging");
    }
    public scrollViewDidScroll(scrollView: UIScrollView) {
        console.log("scrollViewDidScroll");

    }
}

1 Ответ

0 голосов
/ 15 февраля 2019

Вам нужно будет где-нибудь сохранить ссылку на JS newDelegate, иначе она может быть помечена для сборки мусора.

Более того, я бы предложил использовать RadListView для отложенной загрузки, поскольку для этого есть определенные события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...