Nativescript-vue - Реализация делегата для API нативной панели поиска iOS - PullRequest
0 голосов
/ 06 октября 2019

Я изучаю nativescript-vue, используя машинопись. Я реализовал встроенную панель поиска в iOS. Я пытаюсь выяснить, как настроить делегатов (в соответствии с документацией UISearchBarDelegate). Появляется панель поиска, однако при попытке настроить делегата я получаю следующую ошибку:

(CoreFoundation) Завершение приложения из-за необработанного исключения 'NativeScript обнаружил фатальную ошибку: TypeError: Попытка назначить для чтения толькосвойство.

Я имел в виду этот документ: https://docs.nativescript.org/core-concepts/ios-runtime/how-to/ObjC-Subclassing

Любые идеи или другие ресурсы, которые помогут решить эту проблему?

/// Приложение.vue:

<template>
    <Page @loaded="onPageLoaded">
        <ActionBar title="Welcome to NativeScript-Vue!"/>
        <GridLayout columns="*" rows="*">
            <Label class="message" :text="msg" col="0" row="0"/>
        </GridLayout>
    </Page>
</template>

<script lang="ts">
import { isIOS } from 'tns-core-modules/platform'
import { Page } from 'tns-core-modules/ui/page'
import { EventData } from 'tns-core-modules/data/observable'

  export default {
    data() {
      return {
        msg: 'Hello World!'
      }
    },
    methods: {
      onPageLoaded(args: EventData) {
        const page = args.object as Page
        if (isIOS) {
          const navController = page.frame.ios.controller as UINavigationController
          const searchController = UISearchController.new()
          const topController = navController.topViewController
          topController.navigationItem.searchController = searchController

          let searchBarDelegate: SearchBarDelegateImpl = SearchBarDelegateImpl.new()
          searchController.searchBar.delegate = searchBarDelegate
        }
      }
    }
  }

class SearchBarDelegateImpl extends NSObject implements UISearchBarDelegate {
  static ObjCProtocols =  [UISearchBarDelegate]

  static new(): SearchBarDelegateImpl {
    return <SearchBarDelegateImpl>super.new()
  }

  searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    console.log("searchBarTextDidBeginEditing")
  }
}

</script>

<style scoped>
    ActionBar {
        background-color: #53ba82;
        color: #ffffff;
    }

    .message {
        vertical-align: center;
        text-align: center;
        font-size: 20;
        color: #333333;
    }
</style>
...