セグメントからレコードをタップ時にフォーカススキン未反映への対処法

# 目次
1. はじめに
1. 実装方法
1. まとめ
1. 参考

# 1.はじめに
この記事では、iOSでのSegmentウィジェットで設定するRowテンプレートにおいて、フォーカススキン消失の対応方法について紹介します。

# 2.実装方法
**●Segmentの通常実装**
1.プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b40e5271-26f8-f00d-96e8-e13369bf2468.png)
2.SegmentウィジェットをFormに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e49f864c-4631-25d0-401f-902709900188.png)
3.Rowテンプレートを新規作成します。
※手順は次の通りです。
＜PROPERTIES -> Segment -> Row Template項目にあるドロップダウンを展開 -> Create Newをクリック＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a35dd1d8-2292-f642-dbb0-62829f9c6582.png)
4.Rowテンプレートを先程追加したSegmentウィジェットにImportします。
※手順は次の通りです。
＜PROPERTIES -> Segment -> Row Template項目にあるドロップダウンを展開 -> 新しく作成したRowテンプレートをクリック＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/8454e245-7fbd-2187-559e-b6ee3fbcf43a.png)
5.Segmentウィジェットフォーカス時のRowのSkinを作成します。
※例では次の色を設定しています。
```backgroud - color:f25050```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b3af6830-a5db-aa54-c43e-1be4b9bd4ed8.png)
6.作成したFormのControllerファイルを開き、以下コードを入力します。その後、FormのpostShowアクションを追加します。
```javascript
postShow : function(){
    this.view.segDemo.widgetDataMap = {
      flxDemo: "flxDemo",
      lblName: "lblName",
    }
    let data = [
      {lblName: 'demo loss skin focus 1'},
      {lblName: 'demo loss skin focus 2'},
      {lblName: 'demo loss skin focus 3'},
      {lblName: 'demo loss skin focus 4'},
      {lblName: 'demo loss skin focus 5'},
      {lblName: 'demo loss skin focus 6'},
      {lblName: 'demo loss skin focus 7'},
      {lblName: 'demo loss skin focus 8'},
      {lblName: 'demo loss skin focus 9'}
    ];
    this.view.segDemo.setData(data);
  },
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/32d42e76-e1a8-0688-ab13-4f053316e8f0.png)
7. 実行後、動作確認してみるとフォーカス時のSkinが動作していないことが確認できます。
※以下動画ではわかりませんが、タップしてもフォーカスが当たりません。
　　　　　　　　![Segment3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c61a1687-310d-1e50-af8d-b2afdcf2ee56.gif)



**原因：Flex Rowテンプレートは、SegmentのRow-FocusのSkinを覆ってしまう背景色Skinを使用していることが理由となります。** 

----------------
**●対応方法**
対応方法は以下2つのやり方があります。
1.Flex Rowテンプレートに背景色のないSkinを設定します。
※赤枠が修正対象となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/67cbf652-03e6-d745-1750-23b4a22e7480.png)
　　　　　　　　![Segment2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/d7919d8d-da32-82c1-0bdd-bddd17577cfb.gif)


2.Flex Rowテンプレートの背景色付きSkinを使用する場合は、データ内に以下のコードを追加してください。
※Flex Rowテンプレートの背景色を画像のように設定した状態で、以下のコードを追加して実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5d1dd2d4-cd94-e503-0c24-d0b471c398ca.png)

```javascript
let data = [
      {lblName: 'demo loss skin focus 1', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 2', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 3', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 4', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 5', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 6', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 7', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 8', flxDemo : {"highlightOnParentFocus":true}},
      {lblName: 'demo loss skin focus 9', flxDemo : {"highlightOnParentFocus":true}}
    ];
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/09203155-dd24-2653-8bbf-d2af0a68d985.png)
　　　　　　　　![Segment1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/7b180b13-e139-53e1-b2f8-dd7e53c6767d.gif)


# 3.まとめ
iOSでSegmentのRowにフォーカスするとスキンが失う時にFlex Rowテンプレートを修正する方法を紹介しました。
リスト表示する画面を作成する際にSegment利用することが多いと思いますので、その時にフォーカススキンが表示されないとなった場合はこちらを参考に対応してみてください！


# 4.参考
https://basecamp.temenos.com/s/question/0D56A00000AnrmQSAR/rowtemplateflex-container-loosing-skin-on-segment-record-focus-in-ios

https://qiita.com/Kony_Team/items/edd2f5daf74c88aa0634