A SDLScrollableMessage
creates an overlay containing a large block of formatted text that can be scrolled. It contains a body of text, a message timeout, and up to eight soft buttons. To display a scrollable message in your SDL app, you simply send an SDLScrollableMessage
RPC request.
The message will persist on the screen until the timeout has elapsed or the user dismisses the message by selecting a soft button or cancelling (if the head unit provides cancel UI).
Currently, you can only create a scrollable message view to display on the screen using RPCs.
The SDLScreenManager
uses soft button ids 0 – 10000. Ensure that if you use custom RPCs—such as this one—that the soft button ids you use are outside of this range (i.e. > 10000).
// Create SoftButton Array NSMutableArray<SDLSoftButton *> *softButtons = [[NSMutableArray alloc] init]; // Create Message To Display NSString *scrollableMessageString = [NSString stringWithFormat:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n\n\nVestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare. Purus in massa tempor nec feugiat nisl pretium fusce id.\n\n\nPharetra convallis posuere morbi leo urna molestie at elementum eu. Dictum sit amet justo donec enim diam."]; // Create a timeout of 50 seconds UInt16 scrollableMessageTimeout = 50000; // Create SoftButtons SDLSoftButton *scrollableSoftButton = [[SDLSoftButton alloc] initWithType:SDLSoftButtonTypeText text:@"Button 1" image:nil highlighted:NO buttonId:10001 systemAction:nil handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (buttonPress == nil) { return; } // Create a custom action for the selected button }]; SDLSoftButton *scrollableSoftButton2 = [[SDLSoftButton alloc] initWithType:SDLSoftButtonTypeText text:@"Button 2" image:nil highlighted:NO buttonId:10002 systemAction:nil handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) { if (buttonPress == nil) { return; } // Create a custom action for the selected button }]; [softButtons addObject:scrollableSoftButton]; [softButtons addObject:scrollableSoftButton2]; // Create SDLScrollableMessage Object SDLScrollableMessage *scrollableMessage = [[SDLScrollableMessage alloc] initWithMessage:scrollableMessageString timeout:scrollableMessageTimeout softButtons:[softButtons copy] cancelID:<#UInt32#>]; // Send the scrollable message [self.sdlManager sendRequest:scrollableMessage];
// Create SoftButton Array var softButtons = [SDLSoftButton]() // Create Message To Display let scrollableMessageText = """ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare. Purus in massa tempor nec feugiat nisl pretium fusce id. Pharetra convallis posuere morbi leo urna molestie at elementum eu. Dictum sit amet justo donec enim diam. """ // Create a timeout of 50 seconds let scrollableTimeout: UInt16 = 50000 // Create SoftButtons let scrollableSoftButton = SDLSoftButton(type: .text, text: "Button 1", image: nil, highlighted: false, buttonId: 10001, systemAction: .defaultAction, handler: { (buttonPress, buttonEvent) in guard let press = buttonPress else { return } // Create a custom action for the selected button }) let scrollableSoftButton2 = SDLSoftButton(type: .text, text: "Button 2", image: nil, highlighted: false, buttonId: 10002, systemAction: .defaultAction, handler: { (buttonPress, buttonEvent) in guard let press = buttonPress else { return } // Create a custom action for the selected button }) softButtons.append(scrollableSoftButton) softButtons.append(scrollableSoftButton2) // Create SDLScrollableMessage Object let scrollableMessage = SDLScrollableMessage(message: scrollableMessageText, timeout: scrollableTimeout, softButtons: softButtons, cancelID: <#UInt32#>) // Send the scrollable message sdlManager.send(scrollableMessage)
You can dismiss a displayed scrollable message before the timeout has elapsed. You can dismiss a specific scrollable message, or you can dismiss the scrollable message that is currently displayed.
If connected to older head units that do not support this feature, the cancel request will be ignored, and the scrollable message will persist on the screen until the timeout has elapsed or the user dismisses the message by selecting a button.
// `cancelID` is the ID that you assigned when creating and sending the scrollable message SDLCancelInteraction *cancelInteraction = [[SDLCancelInteraction alloc] initWithScrollableMessageCancelID:cancelID]; [self.sdlManager sendRequest:cancelInteraction withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (!response.success.boolValue) { // Print out the error if there is one and return early return; } <#The scrollable message was canceled successfully#> }];
// `cancelID` is the ID that you assigned when creating and sending the alert let cancelInteraction = SDLCancelInteraction(scrollableMessageCancelID: cancelID) sdlManager.send(request: cancelInteraction) { (request, response, error) in guard response?.success.boolValue == true else { return } <#The scrollable message was canceled successfully#> }
SDLCancelInteraction *cancelInteraction = [SDLCancelInteraction scrollableMessage]; [self.sdlManager sendRequest:cancelInteraction withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (!response.success.boolValue) { // Print out the error if there is one and return early return; } <#The scrollable message was canceled successfully#> }];
let cancelInteraction = SDLCancelInteraction.scrollableMessage() sdlManager.send(request: cancelInteraction) { (request, response, error) in guard response?.success.boolValue == true else { return } <#The scrollable message was canceled successfully#> }