Reland "[ios] Set Reading List Messages Toggle item's on property"

This is a reland of 80928c4f7a6b8158e08d62b3cda340a4bcf68a0f
Original issue: Removed target selector by removed cellForRowAtIndexPath
implementation.

Original change's description:
> [ios] Set Reading List Messages Toggle item's on property
>
> Instead of relying on cellForRowAtIndexPath to configure the
> Reading List Messages toggle switch, the correct approach is
> to set the item's on property so that configureCell: updates
> the cell's switch on state.
>
> Bug: 1240802
> Change-Id: Ia62bbaf4804f94f231053fda31d06d1e73a703a8
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3137533
> Auto-Submit: Chris Lu <thegreenfrog@chromium.org>
> Commit-Queue: Olivier Robin <olivierrobin@chromium.org>
> Reviewed-by: Olivier Robin <olivierrobin@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#917583}

Bug: 1240802
Change-Id: Iae26a8bc78cd822ec105eda2be28ead7d9d49f1a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3152394
Reviewed-by: Olivier Robin <olivierrobin@chromium.org>
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Cr-Commit-Position: refs/heads/main@{#920238}
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm b/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm
index 0a913db..2f11154 100644
--- a/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm
+++ b/ios/chrome/browser/ui/reading_list/reading_list_table_view_controller.mm
@@ -123,6 +123,8 @@
 @property(nonatomic, assign) BOOL needsSectionCleanupAfterEditing;
 // Handler for URL drag interactions.
 @property(nonatomic, strong) TableViewURLDragDropHandler* dragDropHandler;
+// The toggle setting of showing the Reading List Messages prompt.
+@property(nonatomic, strong) SyncSwitchItem* messagesPromptToggleSwitchItem;
 @end
 
 @implementation ReadingListTableViewController
@@ -286,15 +288,9 @@
     DCHECK(IsReadingListMessagesEnabled());
     SettingsSwitchCell* switchCell =
         base::mac::ObjCCastStrict<SettingsSwitchCell>(cell);
-    PrefService* user_prefs = self.browser->GetBrowserState()->GetPrefs();
-    BOOL neverShowPrefSet =
-        user_prefs->GetBoolean(kPrefReadingListMessagesNeverShow);
-    switchCell.switchView.on = !neverShowPrefSet;
     [switchCell.switchView addTarget:self
                               action:@selector(switchAction:)
                     forControlEvents:UIControlEventValueChanged];
-    TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
-    switchCell.switchView.tag = item.type;
   }
   return cell;
 }
@@ -348,6 +344,9 @@
 - (void)onPreferenceChanged:(const std::string&)preferenceName {
   DCHECK(IsReadingListMessagesEnabled());
   if (preferenceName == kPrefReadingListMessagesNeverShow) {
+    PrefService* user_prefs = self.browser->GetBrowserState()->GetPrefs();
+    self.messagesPromptToggleSwitchItem.on =
+        !user_prefs->GetBoolean(kPrefReadingListMessagesNeverShow);
     NSIndexPath* indexPath = [self.tableViewModel
         indexPathForItemType:SwitchItemType
            sectionIdentifier:SectionIdentifierMessagesSwitch];
@@ -736,12 +735,15 @@
 - (void)addPromptToggleItemAndSection {
   TableViewModel* model = self.tableViewModel;
   [model addSectionWithIdentifier:SectionIdentifierMessagesSwitch];
-  SyncSwitchItem* switchItem =
+  self.messagesPromptToggleSwitchItem =
       [[SyncSwitchItem alloc] initWithType:SwitchItemType];
-  switchItem.text =
+  self.messagesPromptToggleSwitchItem.text =
       l10n_util::GetNSString(IDS_IOS_READING_LIST_MESSAGES_SETTING_TITLE);
-  switchItem.enabled = YES;
-  [model addItem:switchItem
+  self.messagesPromptToggleSwitchItem.enabled = YES;
+  PrefService* user_prefs = self.browser->GetBrowserState()->GetPrefs();
+  self.messagesPromptToggleSwitchItem.on =
+      !user_prefs->GetBoolean(kPrefReadingListMessagesNeverShow);
+  [model addItem:self.messagesPromptToggleSwitchItem
       toSectionWithIdentifier:SectionIdentifierMessagesSwitch];
   TableViewLinkHeaderFooterItem* footerItem =
       [[TableViewLinkHeaderFooterItem alloc] initWithType:SwitchItemFooterType];